当我编译我的精灵时,将它与我最古老的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版本。
有可能吗?或者我不理解什么?
答案 0 :(得分:0)
如果没有大量的进一步的麻烦,这是不可能的。
假设libc
只不过是一个普通的库。现在,编译和最终ELF二进制文件之间发生的链接过程涉及解析使用的符号。 Glibc符号是版本化的,因为呃...永远,我想,所以你不能为这两个版本的库使用相同的编译代码。您需要做的是拥有两个版本的程序,然后运行正确的版本,具体取决于可用的glibc版本。
这里的问题是几乎所有这样的功能都需要使用glibc ......
无论如何,您似乎正在解决不同glibc实现中的错误。这听起来很糟糕,我不会羡慕你,特别是因为你似乎不知道你的程序会找到哪个版本的glibc。对于不依赖于特定库的程序而言,正确的方法是静态链接,因此二进制文件中存在所有必要的东西。 AFAIK应该与glibc合作并假设你不在袖珍计算器上这样做,最终的二进制大小增加大约2MB并不会对你造成伤害。