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

그러면 실행 파일이 파일을 찾을 수 있게 됩니다.

관련 정보