在我的 Ubuntu 18.04 機器上,我使用 qemu-arm 執行 ARM 平台的 32 位元 ELF 文件,如下所示:
$ file bin
bin: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=5018caf41114f911f0a0fd09c4f9a0bb1191c87a, not stripped
$ qemu-arm bin
bin: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
在另一台具有 ARM 處理器的機器上,我透過在二進位檔案上執行 ldd 來獲得以下輸出:
$ ldd bin
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e25000)
/lib/ld-linux-armhf.so.3 (0xb6f11000)
在我的 Linux 機器上,我安裝了: ld-linux-armhf.so.3 ,它位於路徑: /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3
$ ls -l /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3
lrwxrwxrwx 1 root root 10 Feb 25 2014 /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 -> ld-2.19.so
我創建了符號連結:
$ sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib/ld-linux-armhf.so.3
然而,即使如此,二進位檔案也不會執行,因為它無法找到並載入檔案 libc.so.6。
我該如何解決這個問題?
答案1
在 LD_LIBRARY_PATH 前面加上 /lib/arm-linux-gnueabihf: (或如果呼叫可執行檔的行上它為空,則將其設為 /lib/arm-linux-gnueabihf:
LD_LIBRARY_PATH=/lib/arm-linux-gnueabihf qemu-arm bin
這應該允許可執行檔找到該檔案。