【问题标题】:Running binaries compiled in RHEL 7 gcc 4.7 in RHEL 6在 RHEL 6 中运行在 RHEL 7 gcc 4.7 中编译的二进制文件
【发布时间】:2017-01-28 21:42:29
【问题描述】:

我有一堆使用 gcc 4.7 在 RHEL 7 中构建的库。有以下可能吗

1) Can the binary be executed in RHEL 6 host without re-compiling ? 

2) The shared objects produced in RHEL 7 hosts with gcc 4.7 be used 
on a RHEL 6 with gcc 4.4 compiler ?

这里有什么注意事项?

【问题讨论】:

    标签: linux gcc rhel rhel6 rhel7


    【解决方案1】:

    如果您使用 Red Hat Developer Toolset 中包含的 GCC 编译器,RH 保证在主要 RHEL 版本上编译的应用程序也将在 +1 版本上运行,例如在 RHEL 6 上编译并在 RHEL 6 或 7 上运行.

    有 v4,还有 GCC 5 和正在开发的 6。

    http://developers.redhat.com/products/developertoolset/overview/

    【讨论】:

    • 这种前向兼容性如何工作?这是否意味着库是静态链接的?
    【解决方案2】:

    如果您不静态链接二进制文件,您的问题将是共享库:

    gcc 通常将 C 程序链接到:

    • glibc -- C 运行时库的实现。 RHEL 6 和 7 具有该库的不同版本。 glibc 使用符号标记,即:

      myaut@panther:/tmp> readelf -s /lib64/libc.so.6 | grep ' open@'
      1679: 00000000000d8a70    90 FUNC    WEAK   DEFAULT   12 open@@GLIBC_2.2.5
      

      因此,如果您的程序链接的函数具有 RHEL6 中存在的较新标签,您将无法运行您的程序。

    • libgcc_s 是一个 GCC 运行时,主要包含硬件平台上不可用的函数(即 32 位二进制文​​件不支持 64 位 long long 算法,因此它们需要库来执行此操作) ,把它似乎是可选的。

    最后,GCC 4.4 和 4.7 有兼容的 ABI,所以你不应该因为不同的编译器而遇到麻烦。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多