如何在Ubuntu上安装GCC-12

28
$ sudo apt search gcc-12
Sorting... Done
Full Text Search... Done
$ uname -a
Linux Han 5.10.81.1-microsoft-standard-WSL2 #1 SMP Mon Nov 22 18:52:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

我正在使用默认的sources.list文件,想要安装gcc-12,但是在镜像源中找不到它,我该怎么办!


Ubuntu,gcc-12 https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test → gcc 概述 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu/pool/main/g/ - Knud Larsen
6
@gcc-12在你提供的链接中没有被提及。 - Jean-Michaël Celerier
1
windows-subsystem-for-linux: Ubuntu 22.04应该有一个适用于gcc-12版本的......,因为默认的Ubuntu已经提供了https://packages.ubuntu.com/jammy/g++-12。..... Ubuntu 22.04将在明天发布。 - Knud Larsen
顺便提一下,您不应该在使用apt search时需要使用sudo - tripleee
3个回答

37

在Ubuntu 20.04中无法获取gcc-12,因此我们需要从源代码进行编译。以下是我从此视频借鉴的步骤:

  • 步骤1:克隆gcc源代码并检出gcc-12分支
$ git clone https://gcc.gnu.org/git/gcc.git gcc-source
$ cd gcc-source/
$ git branch -a
$ git checkout remotes/origin/releases/gcc-12
  • 第二步:创建另一个构建目录

请注意,从源代码目录中运行 ./configure 不受支持,详见这里

$ mkdir ../gcc-12-build
$ cd ../gcc-12-build/
$ ./../gcc-source/configure --prefix=$HOME/install/gcc-12 --enable-languages=c,c++
  • 步骤 3:安装GCC必备条件并再次运行配置

缺失的库将在上述./configure输出中显示,逐个搜索并安装。

$ apt-cache search MPFR
$ sudo apt-get install libmpfrc++-dev
$ apt-cache search MPC | grep dev
$ sudo apt-get install libmpc-dev
$ apt-cache search GMP | grep dev
$ sudo apt-get install libgmp-dev
$ sudo apt-get install gcc-multilib
$ ./../gcc-source/configure --prefix=$HOME/install/gcc-12 --enable-languages=c,c++

另一种选择是运行download_prerequisites脚本。

$ cd ../
$ cd gcc-source/
$ ./contrib/download_prerequisites
$ ./../gcc-source/configure --prefix=$HOME/install/gcc-12 --enable-languages=c,c++
  • 第四步:编译gcc-12
$ make -j16

仍然缺少flex:

$ sudo apt-get install flex
$ ./../gcc-source/configure --prefix=$HOME/install/gcc-12 --enable-languages=c,c++
$ make -j16
$ make install

另一种方法是使用Ubuntu 22.04,在那里可以使用gcc-12。在Ubuntu 22.04中,可以使用apt安装gcc-12:

$ sudo apt install gcc-12

我在Kubuntu 20.04上尝试了一下。如果没有download_prerequisites,它会抱怨缺少“isl”组件。此外,我需要提供configure选项--disable-multilib和--with-isl。然后才能成功构建。但是,在安装flex之后的第二次构建失败,显示“错误2”,并且它说我应该先“make distcean”。最后,我尝试安装,但它说目标安装未知。 - Silicomancer
为什么在安装 flex 之后需要进行第二次 make?为什么不是一开始就安装 flex,然后再执行单个 make 命令呢? - Silicomancer
@Silicomancer 在我的情况下,当运行 ./../gcc-source/configure 时,它没有抱怨缺少 flex,直到 make -j16 阶段才出现了问题。 - lifang
如何在Linux下将gcc-12添加到备选C和C++编译器? - Khurshid Normuradov
1
@KhurshidNormuradov sudo update-alternatives --install /usr/bin/gcc gcc ~/install/gcc-12/bin/gcc 120 --slave /usr/bin/g++ g++ ~/install/gcc-12/bin/g++ --slave /usr/bin/gcov gcov ~/install/gcc-12/bin/gcov 命令可以完成此操作(假设 ~/install/gcc-12 中已安装了 gcc-12)。更多信息请参考 https://linuxize.com/post/how-to-install-gcc-compiler-on-ubuntu-18-04/。 - lifang
对于在虚拟机上构建的用户,请注意:您需要相当大的空间。对我来说,gcc-source文件夹大小为1.9 GB,而gcc-12-build最终占用了8.2 GB的空间。您还需要足够的交换空间(如果您没有交换分区,请参见https://askubuntu.com/a/299441以了解如何创建交换文件),否则构建可能会因信号9而失败。 - Preminster

13
你可以使用Homebrew来安装预编译的二进制文件。 按照说明在https://brew.sh/安装Homebrew,然后执行brew install gcc以获取默认的GCC(目前为11)或执行brew install gcc@12以获取GCC-12。 请注意,这可能需要编译缺少的依赖项。

Homebrew 只能在 macOS 上使用,对吗? - Silicomancer
5
不,你现在也可以在Linux上使用它。 - Åsmund
error: 1604 bytes of body are still expected fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack: invalid index-pack output Failed during: git fetch --force origin refs/heads/master:refs/remotes/origin/master``` - mLstudent33

3

如果您只是为了64位添加,那么您需要在配置语句的末尾添加“--disable=multilib”。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接