如何在centos 6上恢复系统gcc编译器
Posted
技术标签:
【中文标题】如何在centos 6上恢复系统gcc编译器【英文标题】:How to recover system gcc compiler on centos 6 【发布时间】:2018-09-12 15:33:43 【问题描述】:我在集群上运行 centos 6。我安装了最新的 gcc-8.2.0。并建立了一个链接“ln -sf /usr/bin/gcc-8.2 gcc”。 我对 g++ 和 gfortran 做了同样的事情。 我想重新安装 gcc-8.2.0 并继续
make clean
在 gcc-8.2 目录中。 当我尝试时
./configure
我知道 C 编译器无法创建可执行文件 我创建的链接已损坏。 找不到系统gcc-4.4.7
which gcc
不提供 gcc
sudo yum install gcc gcc-c++
gcc 已经安装好了。 我试图安装一个 rpm,但由于依赖关系而失败。 我在 /opt/pgi 中安装了 pg 编译器 当我配置时
CC=/path to/pgi/bin/pgcc FC=/path to/pgi/bin/pgfortran ./configure
我仍然得到 C 编译器无法创建可执行文件 我尝试了以下 c++ 程序
#include <iostream>
using namespace std;
int main()
cout << "Hello world!" << endl;
return 0;
用命令
/opt/pgi/linux_86_64/12.08/bin/pgcpp hello.cpp -o hello
它给出了未找到float.h的编译错误。在另一台运行 gcc 的 linux PC 上,该程序使用命令运行
g++ hello.cpp -o hello
如果可能的话,我将不胜感激找到 systemgcc 或使用 pg 编译器编译 gcc 的任何帮助
我承认这是一团糟,需要重新安装和重新配置操作系统。但后来我做到了
sudo yum install compat-gcc-34
现在我有 gcc34 并且 gcc-8.2 的配置在没有“c 编译器无法创建可执行文件”的情况下通过。 (请注意,之前文章中提到的 ./configure 实际上是
../gcc_8_2_release/configure
在“gcc_8_2_release_build”中,所以 gcc 没有在其源目录中构建。 我现在遇到的问题是make,需要g++,报错
uint_t(64) or int_t(64) not found.
感谢所有浏览过这篇文章的人,感谢您的耐心等待。 任何帮助将不胜感激。
这就是我摆脱困境的方法。 用下面两个命令
sudo yum install compat-gcc-34-c++
sudo yum install compat-gcc-34-g77
我能够安装旧版本的 gcc、c++ 和 g77。然后我能够构建 gcc-8.2。 现在我有一个带有最新 gcc 的功能系统,是的,它可能需要重新安装/重新配置,但它功能齐全。 我学到了很多东西,非常感谢@Basile 的 cmets 和指导方针。然而,在某一时刻,他相当消极和令人沮丧。 但多亏了我的信念和毅力,更重要的是浏览了别人分享的知识,我已经能够找回我开始相信是失败的事业。 谢谢大家。
【问题讨论】:
你试过yum reinstall gcc
吗?
未来;当您想要一个比 RedHat/CentOS 系统上的系统更新的编译器时,请考虑使用“devtoolset”包。请参阅 fx Product Documentation for Red Hat Developer Toolset 7。 Devtoolset 很好地解决了保留系统编译器的问题,同时还让您可以访问更新的工具,这些工具与使用系统编译器构建的所有内容兼容并完全受 RedHat 支持。
【参考方案1】:
这更像是一个系统管理员问题,而不是编程问题。
我的建议:
不要弄乱你的/usr/bin/
。让你的包管理器 yum
来填充它——如果没有 yum
就不要在里面添加任何东西;所以手动删除你在那里创建的任何符号链接(错误地)
重装旧系统gcc
4.4和g++
4.4(使用yum
)
从源代码重新构建您的 GCC 8。使用--program-suffix=-8
配置它(但没有--prefix
,或者如果您没有root 访问权限,则使用--prefix=$HOME/soft/
)。所以它会安装 /usr/local/bin/gcc-8
和 /usr/local/bin/g++-8
等...(或者,如果你给了 --prefix=$HOME/soft/
,一个 $HOME/soft/bin/gcc-8
等...)
如果您还没有$HOME/bin/
,请创建一个
确保在您的$PATH
中有$HOME/bin/
早(在/usr/bin/
之前)
添加符号链接ln -sv /usr/local/bin/gcc-8 $HOME/bin/gcc
和g++
等。
然后,当您输入 gcc
时,您将获得指向 /usr/local/bin/gcc-8
等的符号链接。
如果您无法写信给/usr/local/
(例如,因为您没有root 权限...),您可以将--prefix=$HOME/soft/
传递给GCC 8 .../configure
,然后将上面的/usr/local/
替换为$HOME/soft/
如果您是系统管理员并且可以写信给/usr/local/
并且必须为许多用户设置一些东西:添加符号链接ln -s /usr/local/bin/gcc-8 /usr/local/bin/gcc
等并要求您的用户将/usr/local/bin/
放入他们的 $PATH
在/usr/bin/
之前
顺便说一句,请注意,明确记录了 GCC 8(或其他)需要在其源代码树的外部构建:在 Installing GCC 中,您可以阅读:
首先,我们强烈建议将 GCC 构建到与不位于源代码树中的源代码不同的目录中。
(“强烈推荐”应该被视为说“你绝对应该”的礼貌方式)
所以你的./configure
又是一个错误。
你的系统搞砸了可能比你想象的更严重(也许你需要重新安装,或致电 Redhat 支持)。
PS。我不知道 Redhat(仅在上个世纪使用过)。我最喜欢的发行版是 Debian/testing 或 Debian/unstable(我的计算机是台式机,而不是集群)。
【讨论】:
感谢@Basile 提供的非常有用的提示。我的问题是 sudo yum install gcc gcc-c++ 说 gcc 已经安装,而 sudo yum install gcc-4.4 说 gcc-4.4 不存在 是的,你需要强制重新安装gcc
。我对yum
不够熟悉,无法提供帮助。但是如何做到这一点应该在unix.stackexchange.com 上询问;如果您不知道如何重新安装 gcc
,您可以考虑重新安装整个系统。换句话说,你已经把你的系统弄得一团糟
问题已解决,请参阅原帖末尾的编辑。【参考方案2】:
通过以下命令解决了这个问题
sudo yum install compat-gcc-34-c++
sudo yum install compat-gcc-34-g77
一旦安装了这个旧版本的 gcc,最新版本 gcc-8.2 就构建好了,系统不再乱成一团。它非常健康和合身。
【讨论】:
这不是一个好的解决方案。您可以删除您创建的愚蠢符号链接,然后改为完成yum reinstall gcc gcc-c++
,以恢复原始系统编译器。不要替换系统编译器,请参阅 Basile 的回答。
你的聪明答案行不通,我的愚蠢解决方案行得通!没有愚蠢的链接。另一个是说我的系统搞砸了,什么搞砸了?我可以拥有尽可能多的编译器版本。这个论坛是用来分享信息的,不是说谁更傻,可以去别的论坛。以上是关于如何在centos 6上恢复系统gcc编译器的主要内容,如果未能解决你的问题,请参考以下文章
Linux系统:第十三章:centos误删文件如何恢复文件数据