英文:
Update GCC on Ubuntu
问题
我正在进行一个需要GCC 10.x或更高版本的项目。
目前我在Ubuntu 20.04.1上安装的是GCC 9.4.0。我尝试更新编译器,但未成功。
有人可以给我升级的建议吗?
我在gcc网站上看到,版本9.4比一些10.x版本更为最新。GCC的结构是怎样的?
此外,我尝试了以下操作:
sudo apt-get install gcc-10.2 g++-10.2
但最终我的GCC版本仍然是9.4。
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
英文:
I am on a project that needs GCC 10.x or later.
At this time I have GCC 9.4.0 on Ubuntu 20.04.1. I tried to update the compiler, but it does not work.
Can anybody give me an advice for the update?
I read on the gcc website that version 9.4 is more up-to-date than some 10.x versions. How is Gcc structured?
among other things I tried:
sudo apt-get install gcc-10.2 g++-10.2
but after all my gcc version is still 9.4
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
答案1
得分: 5
这是Linux中的一个常见模式。当同一个程序的多个版本安装时,尽管可执行文件都存在于/usr/bin/
目录中,但只有一个版本被视为该程序。例如,如果安装了gcc-9
和gcc-10
,两个可执行文件都存在,分别为/usr/bin/gcc-9
和/usr/bin/gcc-10
,但只有一个版本会被视为gcc
。这是通过在/usr/bin/gcc
的目录中创建符号链接来实现的。在Ubuntu 20.04中,首选版本是gcc-9
,因此将gcc-9
创建为gcc
的符号链接。
您可以通过运行以下命令来检查这一点。
$ which gcc | xargs file
输出将会是
/usr/bin/gcc: symbolic link to gcc-9
有几种方法可以将gcc-10
用作C编译器。
-
直接调用
gcc-10
可执行文件。而不是使用gcc <code.c>
,调用gcc-10 <code.c>
。 -
您可以手动创建
gcc-10
作为首选的gcc
符号链接。假设您没有修改系统路径,可以使用以下命令。
# ln -s /usr/bin/gcc-10 /usr/local/bin/gcc
这是因为默认情况下,/usr/local/bin/
中的可执行文件优先于/usr/bin/
。
- 如果您使用bash,您可以在您的
.bashrc
文件中创建一个名为gcc
的别名,将其指向gcc-10
。添加以下行到您的.bashrc
文件中。
alias gcc="gcc-10"
请记住重新启动bash或运行source ~/.bashrc
。
- 使用
update-alternatives
(感谢@ted-lyngmo指出这一点)。基于Debian的发行版提供了一个单独的程序,可以更轻松地进行符号链接或更多功能的设置。使用man update-alternatives
可以了解更多信息。要将gcc-10
设置为首选的gcc
,使用以下命令。
# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 60
上述命令表示,/usr/bin/gcc
是需要的link
,名称是gcc
,目标可执行文件是/usr/bin/gcc-10
,优先级为60。
这将gcc
链接到/etc/alternatives/gcc
,它本身是一个指向/usr/bin/gcc-10
的符号链接。如果添加了优先级更高的程序到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
的某个版本更新。
英文:
This is a common pattern in linux. When there are multiple versions of the same program installed, though the executables are all present in the /usr/bin/
directory, only one of them is "visible" as that program. For example, if you install gcc-9
and gcc-10
, both executables are present as /usr/bin/gcc-9
and /usr/bin/gcc-10
but only one of them is visible as gcc
. This happens by symlinking a preferred version to the same directory as /usr/bin/gcc
. In ubuntu 20.04, the preferred version is gcc-9
and so, gcc-9
is symlinked as gcc
.
You can check this by running the following command.
$ which gcc | xargs file
The output will be
/usr/bin/gcc: symbolic link to gcc-9
There are a few things you can do to use gcc-10
as your c compiler.
- Directly call the
gcc-10
executable. Instead of usinggcc <code.c>
, callgcc-10 <code.c>
. - You can manually symlink
gcc-10
as the preferredgcc
. Assuming you did not modify the system paths, the following command can be used.
# ln -s /usr/bin/gcc-10 /usr/local/bin/gcc
This works because, by default, the executables in /usr/local/bin/
take precedence over /usr/bin/
.
- If you are using bash, you can create an alias for
gcc
asgcc-10
. Add the following line to your.bashrc
.
alias gcc="gcc-10"
Remember to relaunch bash or source ~/.bashrc
.
- Using
update-alternatives
(Thanks to @ted-lyngmo for pointing it out). Debian based distributions supply a separate program, that can make symlinking easier / more functional. Read more usingman update-alternatives
. To usegcc-10
as the preferredgcc
, use the following command.
# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 60
The above command says, /usr/bin/gcc
is the link
needed and the name
is gcc
, the target executable is /usr/bin/gcc-10
and it has a priority of 60.
This links gcc
to /etc/alternatives/gcc
, which itself is a symlink to /usr/bin/gcc-10
. If a higher priority program is added to update-alternatives
, /etc/alternatives/gcc
points to the higher priority program.
If you don't have any specific reason, I would also recommend to upgrade to a newer ubuntu version, so that the default gcc
is a newer one.
> I read on the gcc website that version 9.4 is more up-to-date than some 10.x versions.
With newer gcc
versions, new features are added. Support for newer c/c++ standards are also added. Eg. You can read the changes for gcc-10
here. But people still need gcc-9
because some programs only build with gcc-9
. So, GNU maintains gcc-9
(and much older versions) for a long time. Bugs are fixed, and newer releases are made. This can happen after the release of a newer gcc
version. So, it is very much possible that a version of gcc-9
is newer than a version of gcc-10
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论