ARM 32 位 ELF 无法使用 qemu-arm 执行

ARM 32 位 ELF 无法使用 qemu-arm 执行

在我的 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

这应该允许可执行文件找到该文件。

相关内容