即使安装了新版本并删除了旧版本,也无法修改gcc版本

时间:2018-10-27 09:20:59

标签: linux gcc centos

我在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

但是这仍然行不通。

我对此非常困惑。感谢您的帮助。非常感谢你!

p.s。非常感谢Basile Starynkevitch注意到我做出这些解释:

  1. 我的路径中有/usr/bin/,所以应该没问题。

  2. 我被告知/usr/bin/gcc/应该链接到可执行文件而不是索引,因此指向4.7.0的链接是错误的。但是,谁能告诉我在普通计算机上要链接到的可执行文件,还是/usr/bin/被链接到的可执行文件?这很可能会导致问题的解决。

  3. 我无法再运行configure,因为configure本身需要gcc,但现在找不到。因此,恐怕无法通过此方法解决问题。

1 个答案:

答案 0 :(得分:0)

请注意PATH variable。您可以在其中添加一些$HOME/bin/

还原系统的gcc(因此,请撤消已完成的所有工作)。然后运行which gccgcc -v来了解它到底是什么。

如果从GCC的源代码中编译(如FSF的distributed),请选择最新版本,例如GCC 8在2018年秋季。

仔细阅读有关installing GCC的信息。在其源代码之外进行编译。请注意许多configure选项。我建议考虑使用一些--program-suffix选项(例如--program-suffix=-8)对其进行配置,然后适当地添加符号链接(例如$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/下添加的所有内容。然后强行重新安装 明确地适当的 system gcc软件包(使用yum或其他软件包管理器)。

  

我的PATH中有/ usr / bin /,所以应该没问题。

可能不是。我的建议是将{{1}之前的$HOME/bin//usr/local/bin/ 放在您的PATH中(所以 before /usr/bin/;您可能需要编辑~/.bashrc来更改PATH设置)并添加新的gcc,例如gcc-8(如果从源代码编译GCC 8的话) , 那里。如果要进行系统范围的安装,请安装一些/usr/local/bin/gcc-8程序。如果您要进行个人安装,请安装一些$HOME/bin/gcc-8程序(两者都可以是到其他地方的绝对符号链接)。