更新Ubuntu上的GCC

a64a0gku  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(190)

我遇到了一个小问题。我在一个需要GCC 10.x或更高版本的项目上。此时我在Ubuntu 20.04.1上安装了GCC 9.4.0。我试图更新编译器,但它不起作用。有人能给予我一个更新的建议吗?
我在gcc网站上看到9.4版本比一些10.x版本更新。Gcc是如何构建的?
多谢
我尝试了很多方法:
sudo apt-获取安装gcc-10.2 g++-10.2
但毕竟是我的gcc版本仍然9. 4 gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0

byqmnocz

byqmnocz1#

这是linux中的常见模式。当安装同一程序的多个版本时,可执行文件都存在于/usr/bin/目录中。例如,如果安装gcc-9gcc-10,则两个可执行文件都存在为/usr/bin/gcc-9/usr/bin/gcc-10。然后,一个首选版本是symlinked,与/usr/bin/gcc位于同一目录,在ubuntu20.04中,首选版本是gcc-9,因此,gcc的符号链接指向gcc-9
您可以使用以下命令对此进行验证。

which gcc | xargs file

输出将为

/usr/bin/gcc: symbolic link to gcc-9

有几件事你可以做。
1.直接调用gcc-10可执行文件,不使用gcc <code.c>,而是调用gcc-10 <code.c>
1.您可以手动将gcc-9符号链接为首选gcc。假设您没有修改系统路径,则可以使用以下命令。

# ln -s /usr/bin/gcc-10 /usr/local/bin/gcc

这是因为默认情况下/usr/local/bin/中的可执行文件优先于/usr/bin/
1.如果使用bash,可以为gcc创建一个别名gcc-10

alias gcc="gcc-10"

记得重新启动bash或source ~/.bashrc
1.使用update-alternatives(感谢@ted-lyngmo指出)。基于Debian的发行版提供了一个单独的程序,可以使符号链接更容易/功能更强大。阅读更多使用man update-alternatives的内容。要使用gcc-10作为首选的gcc,请使用以下命令。

# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60

上面的命令表示,/usr/bin/gcc是所需的linknamegcc,目标可执行文件是/usr/bin/gcc-9,其优先级为60。
这将gcc链接到/etc/alternatives/gcc,而/etc/alternatives/gcc本身是/usr/bin/gcc-9的符号链接。如果将更高优先级的程序添加到update-alternatives,则/etc/alternatives/gcc指向更高优先级的程序。
如果你没有什么特别的原因,我也建议你升级到一个新的ubuntu版本,这样默认的gcc就是一个新的版本。
我在gcc网站上看到9.4版本比一些10.x版本更新。
随着新的gcc版本,增加了新的特性。也增加了对新的c/c++标准的支持。例如,你可以阅读gcc-10here的变化。但是人们仍然需要gcc-9,因为一些程序只使用gcc-9构建。所以,GNU维护gcc-9(以及更老的版本)。bug被修复,并且更新的版本被发布。这可能发生在更新的gcc版本发布之后。因此,很有可能gcc-9的版本比gcc-10的版本更新。

相关问题