2010-01-15 69 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