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

我们进行编码和在一台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?

非常感谢您的帮助.

解决方法:

您需要安装必需的依赖项(及其必需的版本)才能构建GCC 4.8;请注意,MPFR,CLOOG等仅是编译器所需要的(因此在编译时才需要,而在您的已编译程序的运行时则不需要),因此您无需安装它们即可部署已编译的程序.不要将编译器链接到所需依赖项的旧版本.

gcc-4.8源tarball具有contrib / download_prerequisites脚本,该脚本可能会有所帮助.

如果要从源tarball构建GCC 4.8,请不要忘记在源树之外进行构建,并遵循install的说明.

您可能希望将程序与-static-libgcc选项链接,甚至要使用–disable-shared和–program-suffix = -4.8 configure options … //配置编译器

(使用该程序后缀选项,您将以gcc-4.8的形式运行新的GCC,除非已在默认情况下在/usr/local/bin /中配置了–prefix,否则它将被安装;这不会干扰系统gcc;如果您没有对/usr/local的[root]写入权限,则应配置自己的–prefix.

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

上一篇:mysql-Rails 3-将多个计数转换为单个查询-OrderedHash


下一篇:linux-您知道我可以在命令行上使用任何类似smush.it的工具吗?