我在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注意到我做出这些解释:
我的路径中有/usr/bin/
,所以应该没问题。
我被告知/usr/bin/gcc/
应该链接到可执行文件而不是索引,因此指向4.7.0的链接是错误的。但是,谁能告诉我在普通计算机上要链接到的可执行文件,还是/usr/bin/
被链接到的可执行文件?这很可能会导致问题的解决。
我无法再运行configure
,因为configure
本身需要gcc,但现在找不到。因此,恐怕无法通过此方法解决问题。
答案 0 :(得分:0)
请注意PATH
variable。您可以在其中添加一些$HOME/bin/
。
还原系统的gcc
(因此,请撤消已完成的所有工作)。然后运行which gcc
和gcc -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
程序(两者都可以是到其他地方的绝对符号链接)。