【问题标题】:How to make my ELF run with both new and old version of glibc?如何让我的 ELF 同时运行新旧版本的 glibc?
【发布时间】:2015-04-24 02:31:18
【问题描述】:

当我编译我的 elf 时,“最佳实践”是让它链接到我能做到的最旧版本的 glibc,所以它可以在新旧版本的 glibc 上工作。

即如果我使用 realpath,在 glibc 的readelf 输出中,我们可以看到既有 GLIBC_2.0 版本又有 GLIBC_2.3 版本,我想使用旧版本,这样我的 ELF 就可以在 glibc 2.0/1/2 上运行。

但是GLIBC_2.3版本大概是自发布以来就开发升级了,我猜GLIBC_2.0版本自glibc 2.3发布以来就没有变过。所以我想我希望我的精灵在存在 GLIBC_2.3 版本时使用它,而在不存在时回退到 GLIBC_2.0 版本。

有可能吗?或者我不明白什么?

【问题讨论】:

    标签: linux linker glibc elf


    【解决方案1】:

    不费吹灰之力,这是不可能的。

    假设libc 只不过是一个常规库。现在,编译和最终 ELF 二进制文件之间发生的链接过程涉及解析使用的符号。 Glibc 符号是从 uhh 开始版本化的……我认为,所以你不能对库的两个版本使用相同的编译代码。您需要做的是拥有 两个 版本的程序,并根据可用的 glibc 版本运行正确的版本。

    这里的问题是几乎所有这样的功能都需要使用 glibc...

    无论如何,您似乎正在解决不同 glibc 实现中的错误。这听起来很糟糕,我并不羡慕你,尤其是因为你似乎不知道你的程序会找到哪个版本的 glibc。对于不能依赖特定库可用的程序的正确方法是静态链接,这样所有必要的东西都在你的二进制文件中。应该与 glibc 一起使用的 AFAIK 并假设您不是在袖珍计算器上执行此操作,由此产生的最大二进制大小增加约 2MB 并不会真正伤害您。

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 2016-07-02
      • 2014-05-28
      • 2014-08-04
      • 1970-01-01
      • 2021-09-25
      • 2019-09-12
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多