En mi máquina Ubuntu 18.04, estoy usando qemu-arm para ejecutar un archivo ELF de 32 bits para la plataforma ARM como se muestra a continuación:
$ 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
En otra máquina que tiene un procesador ARM, obtengo el siguiente resultado al ejecutar ldd en el binario:
$ ldd bin
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e25000)
/lib/ld-linux-armhf.so.3 (0xb6f11000)
En mi máquina Linux, he instalado: ld-linux-armhf.so.3 y está ubicado en la ruta: /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
Creé el enlace simbólico:
$ sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib/ld-linux-armhf.so.3
Sin embargo, incluso entonces el binario no se ejecuta porque no puede encontrar ni cargar el archivo libc.so.6.
¿Cómo resuelvo esto?
Respuesta1
Prefije LD_LIBRARY_PATH con /lib/arm-linux-gnueabihf: (o simplemente configúrelo en /lib/arm-linux-gnueabihf si está vacío en la línea que invoca el ejecutable:
LD_LIBRARY_PATH=/lib/arm-linux-gnueabihf qemu-arm bin
Eso debería permitir que el ejecutable encuentre el archivo.