Sé que hay preguntas similares por ahí, pero no he encontrado una solución ni este caso exacto. El binario fue construido en Arch Linux usando su GCC 4.7. El paquete funciona bien en el sistema de compilación. Los siguientes comandos se ejecutaron en:
Linux vbox-ubuntu 3.2.0-29-generic # 46-Ubuntu SMP vie 27 de julio 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux
El archivo en cuestión se encuentra aquí . Es un compilador cruzado de Linux de 64 bits a Windows de 64 bits. Desentrañarlo ~/proporciona un único ~/mingw64directorio que contiene todo lo necesario.
Cuando intento ejecutar ~/mingw64/x86_64-w64-mingw32/bin/asesto es lo que obtengo:
bash: /home/ruben/mingw64/x86_64-w64-mingw32/bin/as: No such file or directory
Correr file ~/mingw64/x86_64-w64-mingw32/bin/asme da:
/home/ruben/mingw64/x86_64-w64-mingw32/bin/as: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x0b8e50955e7919b76967bac042f49c5876804248, not stripped
Correr ldd ~/mingw64/x86_64-w64-mingw32/bin/asme da:
linux-vdso.so.1 => (0x00007fff3e367000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f2ceae7e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2ceaac1000)
/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f2ceb0a8000)
Estoy realmente perdido. Cualquier ayuda es muy apreciada.
EDITAR : Algunos detalles más: El sistema de compilación es Arch Linux (actualmente glibc 2.16). La salida de ls -les:
-rwxr-xr-x 2 ruben users 1506464 11 aug 23:49 /home/ruben/mingw64/bin/x86_64-w64-mingw32-as
La salida de objdump -pes:
Version References:
required from libz.so.1:
0x0827e5c0 0x00 05 ZLIB_1.2.0
required from libc.so.6:
0x0d696917 0x00 06 GLIBC_2.7
0x06969194 0x00 04 GLIBC_2.14
0x0d696913 0x00 03 GLIBC_2.3
0x09691a75 0x00 02 GLIBC_2.2.5
La salida de ldd -vUbuntu 12.04 es:
linux-vdso.so.1 => (0x00007fff225ff000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd525c71000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd5258b4000)
/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fd525e9b000)
Version information:
/home/ruben/mingw64/x86_64-w64-mingw32/bin/as:
libz.so.1 (ZLIB_1.2.0) => /lib/x86_64-linux-gnu/libz.so.1
libc.so.6 (GLIBC_2.7) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libz.so.1:
libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
Los otros sistemas operativos probados son Fedora 17 (glibc 2.15) y Ubuntu 12.04 (eglibc 2.15). Se cumplen los requisitos de la versión zlib y glibc.

Respuestas:
Si ejecuto
ldd -v asen mi sistema, obtengo:Entonces, sí, parece que estos binarios están buscando un
GLIBC_2.14símbolo, que presumiblemente te falta en tu sistema. Como señaló Svenx, parece que está buscando elmemcpy@@GLIBC_2.14símbolo. En este informe de errormemcpyse describe más información sobre por qué se le dio una nueva versión .Instalar una nueva versión de
glibcen su sistema de destino debería solucionarlo. Si desea intentar reconstruir el binario para que siga funcionando en la versión anteriorglibc, puede probar trucos como el que se enumera aquí . También podría pasar con una cuña que solo proporciona la versión específica delmemcpysímbolo que necesita, pero que se vuelve un poco hacky.Después de leer su actualización : tiene razón, ese no era su problema. Pero creo que lo he encontrado: su binario está solicitando el intérprete
/lib/ld-linux-x86-64.so.2, que no existe en los sistemas Ubuntu 12.04:Si bien
lddsabía que debía encontrarlo en su/lib64lugar, supongo que el núcleo no lo sabe cuando intenta ejecutar el binario y no puede encontrar el intérprete solicitado del archivo. Puede intentar simplemente ejecutarlo a través del intérprete manualmente:No estoy 100% seguro de que esto funcione correctamente: en mi sistema, ejecutarlo de
gccesta manera da un error de segmentación. Pero ese es al menos un problema diferente.fuente
:(/lib64amd64, y aparentemente Arch parchea manualmente sus fuentes gcc para cambiar esto, garantizando así la incompatibilidad con cualquier otra distribución de Linux. Consulte los comentarios de este informe de errores para conocer su extraño razonamiento. Para mí, esta sería una clara señal de advertencia para mantenerse alejado de Arch Linux.patchelffuncionó para ellos.Su problema es una variante del mensaje "No encontrado" al ejecutar un binario de 32 bits en un sistema de 64 bits : tiene un ejecutable que menciona un cargador dinámico que no está allí.
En su caso, el cargador dinámico
/lib/ld-linux-x86-64.so.2existe pero en una ubicación diferente/lib64/ld-linux-x86-64.so.2. La forma más sencilla de hacer que sus programas funcionen sería crear un enlace simbólico:fuente