2016-06-01 124 views
0

我正在考慮直接在我的文件系統中用uClibc庫替換glibc庫(libc.so)。它會起作用嗎?或者我需要重新編譯所有的二進制文件?用uClibs庫替換glibc庫

回答

0

不,這不會工作,不管你如何骰子。

所有來自過程鏈接表和全局偏移表的重要重定位符號序號都不再正確。任何試圖解析被刪除的符號散列部分的嘗試都會驚慌失措,並且會留下一些破碎的字節。即使您要解決這個令人震驚的混亂問題,您也會遇到大量半複製或溢出的頁面,其中包含來自多個動態庫的指令,其大小已不再正確解決。

另一方面,靜態鏈接的二進制文件將不受此更改的影響。

+0

感謝您的建議 –

1

非常糟糕的主意。 uClibc中的「About」頁面上第三句:

從glibc的到uClibc的通常只涉及重新編譯源代碼

1

由於所有其他的答案移植應用程序已經在說:這是不行的。

uClibc和glibc甚至沒有相同的動態庫加載器(ld-linux.so)。共享可執行文件指定它們需要哪個動態庫加載器和哪些共享庫。您可以通過readelf -l /path/to/executable(用於動態庫加載程序)和readelf -d獲取有關共享庫的信息。

對glibc連接將使像這樣的程序:

INTERP   0x000154 0x00008154 0x00008154 0x00013 0x00013 R 0x1 
     [Requesting program interpreter: /lib/ld-linux.so.3] 

0x00000001 (NEEDED)      Shared library: [libc.so.6] 

對uClibc的鏈接的程序會給這樣的事情:

INTERP   0x000114 0x00008114 0x00008114 0x00014 0x00014 R 0x1 
     [Requesting program interpreter: /lib/ld-uClibc.so.0] 

0x00000001 (NEEDED)      Shared library: [libc.so.1]