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

これにより、実行可能ファイルがファイルを見つけることができるようになります。

関連情報