【问题标题】:glibc error when c++ binary compiled dynamically but not staticallyc++二进制动态编译但不是静态编译时的glibc错误
【发布时间】:2020-08-12 16:59:27
【问题描述】:

考虑以下几点: 我有一个 C++ 文件。我使用 RHEL6 机器来编译我的代码。但我希望我的可执行文件/二进制文件也能够在 RHEL4 上运行。 现在我经历了以下3个案例-

  1. 如果我在 RHEL6 上使用 gcc 版本 4.4.7 编译一个简单的 c++ 文件,我无法在 RHEL4 机器上执行它。错误是

加载共享库时出错:需要 glibc 2.5 或更高版本 动态链接器

gcc: Reduce libc required version 给出了解决方案。修复后,我可以在 RHEL4 上运行二进制文件。

  1. 如果我使用静态库编译(在具有相同 gcc 版本的 RHEL6 上), 我能够在 RHEL4 机器上执行它。不需要像案例1那样使用-Wl,--hash-style=both

  2. 如果我在 RHEL6 上编译我的项目(而不是单个文件),那么在 RHEL4 平台上运行二进制文件时会出现以下错误。

/lib64/libc.so.6:未找到版本“GLIBC_2.7”

我的问题是:

a) 为什么静态链接库不会出错。

b) 案例 1 和案例 3 产生的错误有什么区别。

【问题讨论】:

    标签: c++ gcc glibc rhel


    【解决方案1】:
    1. 无法使用该链接器、默认库和动态链接。 3. 静态链接将代码从库复制到您的可执行文件中,并且无论该可执行文件放在哪里,它们都可以非常一致地工作。动态链接在运行时在动态库搜索路径中拥有相同的库和库版本可能会有点麻烦,导致代码在运行时不完整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多