我遇到了一个小问题。我在一个需要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
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
byqmnocz1#
这是linux中的常见模式。当安装同一程序的多个版本时,可执行文件都存在于/usr/bin/目录中。例如,如果安装gcc-9和gcc-10,则两个可执行文件都存在为/usr/bin/gcc-9和/usr/bin/gcc-10。然后,一个首选版本是symlinked,与/usr/bin/gcc位于同一目录,在ubuntu20.04中,首选版本是gcc-9,因此,gcc的符号链接指向gcc-9。您可以使用以下命令对此进行验证。
/usr/bin/
gcc-9
gcc-10
/usr/bin/gcc-9
/usr/bin/gcc-10
/usr/bin/gcc
gcc
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。假设您没有修改系统路径,则可以使用以下命令。
gcc <code.c>
gcc-10 <code.c>
# ln -s /usr/bin/gcc-10 /usr/local/bin/gcc
这是因为默认情况下/usr/local/bin/中的可执行文件优先于/usr/bin/。1.如果使用bash,可以为gcc创建一个别名gcc-10。
/usr/local/bin/
alias gcc="gcc-10"
记得重新启动bash或source ~/.bashrc。1.使用update-alternatives(感谢@ted-lyngmo指出)。基于Debian的发行版提供了一个单独的程序,可以使符号链接更容易/功能更强大。阅读更多使用man update-alternatives的内容。要使用gcc-10作为首选的gcc,请使用以下命令。
source ~/.bashrc
update-alternatives
man update-alternatives
# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60
上面的命令表示,/usr/bin/gcc是所需的link,name是gcc,目标可执行文件是/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的版本更新。
link
name
/etc/alternatives/gcc
1条答案
按热度按时间byqmnocz1#
这是linux中的常见模式。当安装同一程序的多个版本时,可执行文件都存在于
/usr/bin/
目录中。例如,如果安装gcc-9
和gcc-10
,则两个可执行文件都存在为/usr/bin/gcc-9
和/usr/bin/gcc-10
。然后,一个首选版本是symlinked,与/usr/bin/gcc
位于同一目录,在ubuntu20.04中,首选版本是gcc-9
,因此,gcc
的符号链接指向gcc-9
。您可以使用以下命令对此进行验证。
输出将为
有几件事你可以做。
1.直接调用
gcc-10
可执行文件,不使用gcc <code.c>
,而是调用gcc-10 <code.c>
。1.您可以手动将
gcc-9
符号链接为首选gcc
。假设您没有修改系统路径,则可以使用以下命令。这是因为默认情况下
/usr/local/bin/
中的可执行文件优先于/usr/bin/
。1.如果使用bash,可以为
gcc
创建一个别名gcc-10
。记得重新启动bash或
source ~/.bashrc
。1.使用
update-alternatives
(感谢@ted-lyngmo指出)。基于Debian的发行版提供了一个单独的程序,可以使符号链接更容易/功能更强大。阅读更多使用man update-alternatives
的内容。要使用gcc-10
作为首选的gcc
,请使用以下命令。上面的命令表示,
/usr/bin/gcc
是所需的link
,name
是gcc
,目标可执行文件是/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-10
here的变化。但是人们仍然需要gcc-9
,因为一些程序只使用gcc-9
构建。所以,GNU维护gcc-9
(以及更老的版本)。bug被修复,并且更新的版本被发布。这可能发生在更新的gcc
版本发布之后。因此,很有可能gcc-9
的版本比gcc-10
的版本更新。