2013-01-17 43 views
0

我有一個二進制文件需要執行一些* .so文件。 現在,當我嘗試執行它在一些較老的機器就說明GLIBC的依賴

/lib/libc.so.6: version `GLIBC_2.4' not found 

我如何可以改變從/lib/libc.so.6

/lib/i386-linux-gnu/libc.so.6其搜索路徑所以我可以在同一臺機器上運行兩個不同的libc中的文件。

回答

0

你是在一個32位系統上,也許試圖執行一個使用64位glibc的二進制文件?

修改庫搜索路徑可以通過使用LD_LIBRARY_PATH變量來完成,例如,在子shell:

(出口LD_LIBRARY_PATH =/lib目錄/ I386-Linux的GNU:$ {LD_LIBRARY_PATH}; MY-)

+0

actualy我已經在ubuntu 12.04上實現了它ldd -version = 2.15我想在uname上執行它-a = Linux管理2.6.39.4-1smp和ldd 2.2.4版本 –

+0

/bin/sh:/ lib/ld -linux.so.2:未找到版本'GLIBC_2.3'(必需/lib/i386-linux-gnu/libc.so.6) /bin/sh:/lib/ld-linux.so.2:版本'GLIBC_PRIVATE'找不到(需要/lib/i386-linux-gnu/libc.so.6) –

+0

您是否編譯過抱怨GLIBC的程序?如果是這樣,你能提供編譯和鏈接器標誌嗎?或許在'-m32'的行添加一些標誌可能會有所幫助(假設使用gcc)。 – msi

0

您可以打電話時使用LD_LIBRARY_PATH環境變量改變搜索路徑你的二進制。

線沿線的東西:

LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6 ./your_binary 

應該工作。請記住,根據您使用的shell,您可能需要調用exportenv來設置變量。

您可以檢查它的工作使用下面的命令:

LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6libc.so.6 ldd ./your_binary 
     linux-vdso.so.1 => (0x00007fff140e9000) 
     libselinux.so.1 => /lib/libselinux.so.1 (0x008f9000) 
     librt.so.1 => /lib/librt.so.1 (0x006f1000) 
     libacl.so.1 => /lib/libacl.so.1 (0x004e8000) 
     libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00129000) 
     libdl.so.2 => /lib/libdl.so.2 (0x00f25000) 
     /lib/ld-linux.so.2 (0x003b3b000) 
     libpthread.so.0 => /lib/libpthread.so.0 (0x00d07000) 
     libattr.so.1 => /lib/libattr.so.1 (0x00b02000) 

你只需要檢查是否libc.so.6解析成所需的共享對象。

更新:看來你想加載64位二進制文​​件的32位共享對象。據我所知,沒有辦法做到這一點,因爲目標體系結構不同,加載器將拒絕加載32位。如果這是你的情況,這可以解釋爲什麼加載器加載默認的libc。根據您的情況,可能會將二進制編譯爲32位,在這種情況下,它應該以32位libc運行。

+0

LD_LIBRARY_PATH =/lib/i386-linux-gnu/libc.so.6 ./your_binary它不起作用,因爲它從/lib/libc.so.6獲取此文件。我想在上面的位置 –

+0

好吧,我把它倒過來了。我編輯了答案以反映你想要的共享對象。 –

+0

libc.so.6 => /lib/i386-linux-gnu/libc.so.6它現在正在運行/lib/ld-linux.so.2文件顯示相同的GLIBC錯誤..我可以使用多個路徑嗎?或者我怎樣才能使用不同名稱的其他/根分區,並可以從那裏運行這個二進制文件,但不使用「chroot」 –

0

如果您想要在64位計算機上運行32位可執行文件,則需要安裝32位版本。在Fedora或其它系統使用yum運行:

百勝安裝glibc.i686

(注意.i686後綴,它專門爲32個版本的要求),然後再試一次。 ldd(1)命令應該有助於識別所需的庫,並且yum應該足夠聰明以便按照它提供的名稱找到它們。

+0

在我的機器上沒有任何lyk「yum」,「insatall」,gcc。 –

+0

補充說明這是Fedora – vonbrand