我在运行 CentOS6/RHEL6 的计算集群上工作,与大约 100 名其他用户共享,由一名 IT 管理员监督。
最近我开始用 C++ 编写代码,部分代码依赖于 C++11。根据此网页gcc
, 4.8.1及以上版本 支持C++11 。
不幸的是,计算集群有4.4.7版本。
不久前,出于其他原因,我尝试将gcc
版本 4.8.4 安装到集群上我的主目录下的一个位置。安装失败,此错误信息。通过谷歌搜索,我相信我应该更新glibc
,所以我尝试将较新版本安装到我的主目录中。彻底失败。
我的 IT 管理员总结道:“修改集群上的版本可能行不通gcc
。”在我问更多问题惹恼她之前(因为此时我需要更新版本一些C 编译器),我正在众包这些:
(1)将gcc
4.8.1+ 版本安装到我的用户帐户是否可行?(上次我尝试这样做后,有些人说这根本就是一个糟糕的想法。)
(2)如果(1)的答案是肯定的,那么这次我应该采取什么预防措施来确保安装成功?是否有glibc
必要安装到我的帐户?这可行吗?
(3)如果对(1)的回答是否定的,那么我的 IT 管理员是否可以安装gcc
系统范围的较新版本,而不会破坏依赖于现有版本的代码?
(4) 如果以上方法都不适用gcc
,那么换一个 C 编译器之后情况会改变吗?
总而言之,如果可能的话,我正在寻找具有相关知识的人gcc
(或另一个 C 编译器)来解释一个人(没有权限)如何升级它。sudo
答案1
我能够在 Centos 6.7 上的主目录中从源代码构建 GCC 4.8.5。我正在使用发行版 glibc;我不必构建 glibc。
警告:我在安装了发行版 GCC 4.4.x 源包的构建依赖项以及libmpc-devel
来自 epel 存储库的包的系统上执行此操作。如果缺少这些,您可能必须先将它们从源代码构建到主目录中,然后以某种方式更改 gcc 构建过程以从那里使用它们(如果可能的话)。
构建 GCC:
获取 GCC 源代码
curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
提炼
tar xf gcc-4.8.5.tar.bz2
在 GCC 源目录之外创建一个构建目录并进入该目录
mkdir build && cd build
配置。我做了:
../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/home/rakslice/gcc_4_8 \ --enable-checking=release --enable-languages=c,c++,fortran \ --disable-multilib --program-suffix=-4.8
构建。我有 4 个核心,因此我执行以下操作:
make -j 5
安装
make install
现在我可以编译并运行一些测试代码。
/home/rakslice/gcc_4_8/bin/g++-4.8 hello.cpp -o hello ./hello Hello, World!
答案2
关于您的具体问题:
(1)是的,这是可行的,但是可能并不有趣。
(2) 不,通常你可以使用系统 glibc。从 gcc 你需要等libstdc++
。libgcc
我的方法是遵循官方说明 很接近并且只有当它与您的平台非常匹配时才采用非官方指令。
我实际上不会考虑 4.8,而是直接使用当前发布系列之一(5.2 或 4.9)。
注意:我自己没有做过非 root gcc 安装,但是我工作的系统将不同版本的 gcc 作为 gnu 模块进行维护。