我使用的是 CentOS 5.5,我的电脑到目前为止使用的是 gcc-4.1.2,在 /usr/lib/gcc/x86_64-redhat-linux/
下有 2 个索引:4.1.1 和 4.1.2。为了使用某些软件,我必须更新 gcc。
但是当我从下载的 gcc-4.7.0.tar.gz 安装 gcc-4.7.0 后(我没有使用 yum,因为当我尝试它时,所有服务器都告诉我我有最新版本,这当然不是真的,也许这也是我现在面临的问题引起的), /usr/lib/gcc/x86_64-redhat-linux/4.7.0/
就像 4.1.1 一样创建, 4.1.2索引,所以在/usr/lib/gcc/x86_64-redhat-linux/
下有3个索引:4.1.1、4.1.2和4.7.0。在 /usr/lib/gcc/x86_64-redhat-linux/4.7.0/
下有 6 个索引:
bin include lib lib64 libexex share
看起来4.7.0已经成功安装,但是当我运行时
gcc --version
结果还是
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我也跑了
update-alternatives --install /usr/bin/gcc gcc /usr/lib/gcc/x86_64-redhat-linux/4.7.0 40
提高4.7.0的优先级,当我运行时
update-alternatives --config gcc
它说
There is 1 program that provides 'gcc'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/gcc/x86_64-redhat-linux/4.7.0
Enter to keep the current selection[+], or type selection number:
我打印了1,看起来像是选择了4.7.0作为默认gcc,但是当我运行gcc --version
时,结果没有改变!还是4.1.2。
之后我什至通过rpm -e
删除了所有4.1.2 gcc及其相关程序并删除了索引,但是gcc --version
的结果变成了
-bash: gcc: command not found.
当我重新安装4.7.0时,它没有改变。
毕竟,当我查找 /usr/bin/gcc/
的链接时,我发现了
/usr/bin/gcc -> /etc/alternatives/gcc
/etc/alternatives/gcc
的链接是
/etc/alternatives/gcc -> /usr/lib/gcc/x86_64-redhat-linux/4.7.0
这应该是我运行 update-alternatives
行的结果,所以它已经起作用了。它确实链接到了 4.7.0。那么为什么这个链接最终没有调用4.7.0呢?我查不出来。
我什至直接链接到 4.7.0:
ln -s /usr/lib/gcc/x86_64-redhat-linux/4.7.0 /usr/bin/gcc
但是这仍然不起作用。
我对此感到非常困惑。我将感谢您的帮助。非常感谢!
附:非常感谢 Basile Starynkevitch 注意到我做出这些解释:
我的 PATH 中有
/usr/bin/
,所以这应该没问题。我被告知
/usr/bin/gcc/
应该链接到可执行文件而不是索引,因此到 4.7.0 的链接是错误的。但是谁能告诉我要链接到哪个可执行文件,或者在普通计算机中/usr/bin/
链接到哪个可执行文件?这很可能会导致问题的解决。我无法再次运行
configure
,因为configure
本身需要gcc,但现在找不到它。所以恐怕问题不能就此解决。
最佳答案
请注意PATH
variable 。您可以在其中包含一些 $HOME/bin/
。
恢复系统的gcc
(这样就可以消除你所做的所有困惑)。然后运行 which gcc
和 gcc -v
来了解它到底是什么。
如果编译GCC从其源代码(如 FSF 的 distributed)中,选择一个最新版本,例如GCC 8 2018 年秋季。
仔细阅读installing GCC 。在源代码之外对其进行编译。注意许多configure选项。我建议考虑使用一些 --program-suffix
选项(例如 --program-suffix=-8
)对其进行配置,然后适本地添加符号链接(symbolic link)(例如 $HOME/bin/gcc
-> /usr/local/bin/gcc-8
)。
ln -s /usr/lib/gcc/x86_64-redhat-linux/4.7.0 /usr/bin/gcc
这是错误的。由于 /usr/lib/gcc/x86_64-redhat-linux/4.7.0/
是一些内部目录,并且 /usr/bin/gcc
必须是可执行文件。
您可能不需要运行update-alternatives
,但您确实需要在PATH
中提到的目录中(巧妙地)添加一些内容
另请参阅this answer类似的问题。
编辑问题后
您首先需要清理您在 /usr/
下所做的困惑(特别是在 /usr/bin/
中,如果没有软件包系统,您永远不应该更改它)。删除您在 /usr/bin/
和 /usr/lib/
下添加的所有内容。然后强制和显式重新安装适当的系统 gcc
软件包(使用yum
或其他软件包管理器)。
I have /usr/bin/ in my PATH, so this should be OK.
可能不是。我的建议是将 $HOME/bin/
和 /usr/local/bin/
早期添加到您的 PATH
中(因此在 /usr/bin/
之前;您可能需要编辑 ~/.bashrc
来更改您的 PATH
设置)并添加新的 gcc
,例如 gcc-8
(如果您从其源代码编译GCC 8),那里。如果您想要系统范围的安装,请安装一些 /usr/local/bin/gcc-8
程序。如果您想要个人安装,请安装一些 $HOME/bin/gcc-8
程序(两者都可以是到其他地方的绝对符号链接(symbolic link))。
关于linux - 即使安装新版本并删除旧版本后也无法修改 gcc 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53020446/