我有一個二進制文件需要執行一些* .so文件。 現在,當我嘗試執行它在一些較老的機器就說明GLIBC的依賴
/lib/libc.so.6: version `GLIBC_2.4' not found
我如何可以改變從/lib/libc.so.6
到/lib/i386-linux-gnu/libc.so.6
其搜索路徑所以我可以在同一臺機器上運行兩個不同的libc中的文件。
我有一個二進制文件需要執行一些* .so文件。 現在,當我嘗試執行它在一些較老的機器就說明GLIBC的依賴
/lib/libc.so.6: version `GLIBC_2.4' not found
我如何可以改變從/lib/libc.so.6
到/lib/i386-linux-gnu/libc.so.6
其搜索路徑所以我可以在同一臺機器上運行兩個不同的libc中的文件。
你是在一個32位系統上,也許試圖執行一個使用64位glibc的二進制文件?
修改庫搜索路徑可以通過使用LD_LIBRARY_PATH變量來完成,例如,在子shell:
(出口LD_LIBRARY_PATH =/lib目錄/ I386-Linux的GNU:$ {LD_LIBRARY_PATH}; MY-)
您可以打電話時使用LD_LIBRARY_PATH
環境變量改變搜索路徑你的二進制。
線沿線的東西:
LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6 ./your_binary
應該工作。請記住,根據您使用的shell,您可能需要調用export
或env
來設置變量。
您可以檢查它的工作使用下面的命令:
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
運行。
LD_LIBRARY_PATH =/lib/i386-linux-gnu/libc.so.6 ./your_binary它不起作用,因爲它從/lib/libc.so.6獲取此文件。我想在上面的位置 –
好吧,我把它倒過來了。我編輯了答案以反映你想要的共享對象。 –
libc.so.6 => /lib/i386-linux-gnu/libc.so.6它現在正在運行/lib/ld-linux.so.2文件顯示相同的GLIBC錯誤..我可以使用多個路徑嗎?或者我怎樣才能使用不同名稱的其他/根分區,並可以從那裏運行這個二進制文件,但不使用「chroot」 –
如果您想要在64位計算機上運行32位可執行文件,則需要安裝32位版本。在Fedora或其它系統使用yum運行:
百勝安裝glibc.i686
(注意.i686後綴,它專門爲32個版本的要求),然後再試一次。 ldd(1)命令應該有助於識別所需的庫,並且yum應該足夠聰明以便按照它提供的名稱找到它們。
在我的機器上沒有任何lyk「yum」,「insatall」,gcc。 –
補充說明這是Fedora – vonbrand
actualy我已經在ubuntu 12.04上實現了它ldd -version = 2.15我想在uname上執行它-a = Linux管理2.6.39.4-1smp和ldd 2.2.4版本 –
/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) –
您是否編譯過抱怨GLIBC的程序?如果是這樣,你能提供編譯和鏈接器標誌嗎?或許在'-m32'的行添加一些標誌可能會有所幫助(假設使用gcc)。 – msi