linux - 在较旧的 Linux Svrs (Redhat EL 5.7) 上使用最新的 GCC(4.8.1)

标签 linux optimization gcc floating

我们在一台 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 编译器--程序后缀=-4.8 configure options

(使用 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/

相关文章:

c++ - 什么是复制省略和返回值优化?

c - 函数返回结构编译通过 gcc 失败,但通过 vc6.0 成功

linux - 如何找到没有软链接(soft link)的目录?

c - 仅当输出从行首开始时才打印输出?

python - 通过预分配和 `my_list[x] = y` 作为 `__setitem__` 的语法糖来填充 python 列表。

r - 如何将二进制矩阵转换为 R 中的 data.frame? lpSolveAPI

c - sizeof 运算符与可变长度数组一起作为函数参数

c - 有没有什么设计工具可以让我获得C代码中不同函数的确切指令数

linux - 列出编译对象使用的指令集 - 适用于 ARM 和 X86

python - Paramiko,在 SSH 服务器上附加文件