我们在一台 Linux 机器上进行编码和构建,然后部署到我们拥有数百个内核的集群中。目前这两种类型的机器都是 Redhat EL 5.7,默认安装了 GCC 4.1.2。
最近我们发现最新的GCCs(例如4.8.1)对算术计算进行了广泛的优化,包括MPFR/MPC等的使用。因为我们的程序非常浮点计算密集型,我们希望在最新的GCCs中重建我们的程序实现提升。
以下是我们构建的典型程序的当前链接详细信息:
linux-gate.so.1 => (0x007e0000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x009bb000)
libc.so.6 => /lib/libc.so.6 (0x00581000)
/lib/ld-linux.so.2 (0x0034c000)
因为我们不太可能升级操作系统,或者在集群中安装新东西。 (严格控制)。所以问题是:
1,为了开发,我们可以在现有机器上安装最新的GCC吗? (我们尝试并发现需要很多依赖项)。并可能链接到旧库?
2,对于部署,可以不安装新软件就部署到我们的集群上吗?对于这些MPFR等,是否可以只部署so文件,而不是在目标集群节点安装RPM?
非常感谢您的帮助。
最佳答案
您需要安装所需的依赖项(及其所需的版本)以构建 GCC 4.8;请注意,MPFR、CLOOG 等仅编译器需要(因此在编译时需要,而不是在编译程序的运行时),因此您无需安装它们来部署编译程序。不要将编译器链接到所需依赖项的旧版本。
gcc-4.8 源 tarball 有一个 contrib/download_prerequisites
脚本,可能会有帮助。
如果从源代码压缩包构建 GCC 4.8,请不要忘记在源代码树之外构建,并遵循 install 指令。
你可能想用 -static-libgcc 选项链接你的程序,或者甚至用 --disable-shared
和
configure options ..../configure
编译器--程序后缀=-4.8
(使用 program-suffix
选项,您将以 gcc-4.8
运行新的 GCC 并且它将被安装,除非您配置一些 - -prefix
,默认在/usr/local/bin/
;这不会干扰系统gcc
;如果你没有[root ] 对 /usr/local
的写入权限,您应该配置自己的 --prefix
)。
顺便说一句,您可能会考虑自定义 GCC 4.8,例如通过插件或使用 MELT 更好。
关于linux - 在较旧的 Linux Svrs (Redhat EL 5.7) 上使用最新的 GCC(4.8.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139462/