3

我们在一台 Linux 机器上进行编码和构建,并部署到具有数百个内核的集群中。目前这两种机器都是 Redhat EL 5.7,安装了默认的 GCC 4.1.2。

最近我们意识到最新的 GCC(例如 4.8.1)对算术计算进行了广泛的优化,包括 MPFR/MPC 等的使用。因为我们的程序非常密集的浮点计算,我们希望在最新的 GCC 中重新构建我们的程序以实现促进。

以下是我们构建的典型程序的当前链接详细信息:

    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 吗?

非常感谢您的帮助。

4

1 回答 1

4

您需要安装所需的依赖项(及其所需的版本)来构建 GCC 4.8;请注意,MPFR、CLOOG 等只需要编译器(因此在编译时需要,而不是在编译程序的运行时需要),因此您不需要安装它们来部署编译程序。不要将编译器链接到所需依赖项的旧版本。

gcc-4.8源 tarball 有一个contrib/download_prerequisites可能有用的脚本。

如果从源代码 tarball 构建 GCC 4.8,不要忘记在源代码树之外构建,并遵循安装说明。

您可能希望使用-static-libgcc选项链接您的程序,甚至使用和配置选项..../configure链接到编译器--disable-shared--program-suffix=-4.8

(使用该program-suffix选项,您将运行新的 GCCgcc-4.8并且它将被安装,除非您配置 some --prefix/usr/local/bin/默认情况下;这不会干扰系统;如果您gcc没有 [root] 写入权限/usr/local应该配置你自己的--prefix)。

顺便说一句,您可能会考虑自定义您的 GCC 4.8,例如通过插件或使用MELT更好。

于 2013-06-17T05:20:37.123 回答