2010-01-15 70 views
2

我有一个用特定版本的libc(GLIBC2.4)编译的linux共享库(.so),我需要在具有不同libc版本的系统上使用它。我没有相关库的资源,因此我无法重新编译新系统。是否有可能将该库中的依赖关系更改为不同的libc?将共享库重新链接到不同版本的libc

+0

我认为你需要使它运行在* glibc的*旧版本? – bmargulies 2010-01-15 12:18:21

回答

2

如果你需要在一个旧的glibc系统上的.so,你需要源代码,并重新编译/重新链接它与旧的glibc。另一种方法是在非默认位置的旧系统上安装所需的glibc,并为需要此操作的可执行文件调整LD_LIBRARY_PATH。so

如果有更新的glibc,那么它通常不会成为问题,因为glibc往往是向后兼容的。

1

你可以做的最好的事情是为你的系统编译旧的glibc版本,然后用你的glibc和你的共享库构建你的应用程序。丑陋虽然...

3

除非您的程序库真的使用更改过的接口(不太可能),否则您可以对生成的.so文件中的版本进行hexedit引用。无论如何,它们都是文字。

+0

非常黑客,问题也是如此。我不知道参考文献都是文字。 – 2012-01-12 19:06:26

+0

GLIBC _...版本字符串不是全部文本,如果您将它们更改为二进制文件中的较低版本,该符号仍然不起作用。 – pts 2013-10-12 10:14:12

+0

他们是文字。它们位于'.dynstr'字符串表中,就像要解析符号名称的字符串一样。 – 2013-10-12 12:31:33