如何让我的ELF运行新旧版本的glibc?

时间:2015-02-22 19:43:43

标签: linux linker glibc elf

当我编译我的精灵时,将它与我最古老的glibc版本链接是“最佳实践”,因此它可以在glibc的新版本和旧版本上使用。

即。如果我使用realpath,在glibc的readelf输出中我们可以看到有GLIBC_2.0版本和GLIBC_2.3版本,我想使用旧版本,所以我的ELF可以在glibc 2.0 / 1 /上工作2。

但GLIBC_2.3版本可能是自发布以来开发和升级的,我认为自glibc 2.3发布以来GLIBC_2.0版本没有改变。所以我想我希望我的精灵在它出现时使用GLIBC_2.3版本,如果没有,则要回退到GLIBC_2.0版本。

有可能吗?或者我不理解什么?

1 个答案:

答案 0 :(得分:0)

如果没有大量的进一步的麻烦,这是不可能的。

假设libc只不过是一个普通的库。现在,编译和最终ELF二进制文件之间发生的链接过程涉及解析使用的符号。 Glibc符号是版本化的,因为呃...永远,我想,所以你不能为这两个版本的库使用相同的编译代码。您需要做的是拥有两个版本的程序,然后运行正确的版本,具体取决于可用的glibc版本。

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

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