Ich weiß, dass es ähnliche Fragen gibt, aber ich habe weder eine Lösung noch genau diesen Fall gefunden. Die Binärdatei wurde unter Arch Linux mit GCC 4.7 erstellt. Das Paket funktioniert gut auf dem Build-System. Die folgenden Befehle wurden ausgeführt am:
Linux vbox-ubuntu 3.2.0-29-generic # 46-Ubuntu SMP Fr 27. Juli 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux
Die betreffende Datei befindet sich hier . Es ist ein Linux 64-Bit zu Windows 64-Bit Cross-Compiler. Wenn Sie die Verknüpfung aufheben, erhalten Sie ~/
ein einziges ~/mingw64
Verzeichnis, das alles Notwendige enthält.
Wenn ich versuche zu laufen, ~/mingw64/x86_64-w64-mingw32/bin/as
bekomme ich Folgendes:
bash: /home/ruben/mingw64/x86_64-w64-mingw32/bin/as: No such file or directory
Laufen file ~/mingw64/x86_64-w64-mingw32/bin/as
gibt mir:
/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
Laufen ldd ~/mingw64/x86_64-w64-mingw32/bin/as
gibt mir:
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)
Ich bin wirklich ratlos. Jede Hilfe wird sehr geschätzt.
EDIT : Einige weitere Details: Das Build-System ist Arch Linux (derzeit glibc 2.16). Die Ausgabe von ls -l
ist:
-rwxr-xr-x 2 ruben users 1506464 11 aug 23:49 /home/ruben/mingw64/bin/x86_64-w64-mingw32-as
Die Ausgabe von objdump -p
ist:
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
Die Ausgabe von ldd -v
unter Ubuntu 12.04 ist:
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
Die getesteten anderen Betriebssysteme sind Fedora 17 (glibc 2.15) und Ubuntu 12.04 (eglibc 2.15). Sowohl die zlib- als auch die glibc-Versionsanforderungen werden erfüllt.
Antworten:
Wenn ich
ldd -v as
auf meinem System laufe , bekomme ich:Es sieht also so aus, als würden diese Binärdateien nach einem
GLIBC_2.14
Symbol suchen , das Ihnen vermutlich auf Ihrem System fehlt. Wie svenx hervorhob, sieht es so aus, als würde nach demmemcpy@@GLIBC_2.14
Symbol gesucht . Weitere Informationen darüber, warummemcpy
eine neue Version erhalten wurde, finden Sie in diesem Fehlerbericht .Die Installation einer neuen Version von
glibc
auf Ihrem Zielsystem sollte das Problem beheben. Wenn Sie versuchen möchten, die Binärdatei neu zu erstellen, damit sie weiterhin mit der alten Version von funktioniertglibc
, können Sie Tricks wie den hier aufgeführten ausprobieren . Sie könnten vielleicht auch mit einer Unterlegscheibe auskommen, die nur die spezifische Version desmemcpy
Symbols enthält, die Sie benötigen, aber das wird ein bisschen hackig.Nachdem Sie Ihr Update gelesen haben : Sie haben Recht, das war nicht Ihr Problem. Aber ich glaube, ich habe es gefunden: Ihre Binärdatei fordert den Interpreter an
/lib/ld-linux-x86-64.so.2
, der auf Ubuntu 12.04-Systemen nicht vorhanden ist:Obwohl ich wusste, dass ich
ldd
es/lib64
stattdessen finden muss, weiß der Kernel das wohl nicht, wenn er versucht, die Binärdatei auszuführen, und kann den angeforderten Interpreter der Datei nicht finden. Sie können versuchen, es einfach manuell durch den Interpreter zu führen:Ich bin nicht zu 100% sicher, dass dies korrekt funktioniert. Auf meinem System führt die Ausführung auf
gcc
diese Weise zu einem Segmentierungsfehler. Aber das ist zumindest ein anderes Problem.quelle
:(
/lib64
auf amd64 sein sollten, und anscheinend patcht Arch manuell ihre gcc-Quellen, um dies zu ändern, wodurch die Inkompatibilität mit jeder anderen Linux-Distribution da draußen garantiert wird. In den Kommentaren dieses Fehlerberichts finden Sie die bizarren Gründe. Für mich wäre dies ein klares Warnsignal, um sich von Arch Linux fernzuhalten.patchelf
für sie funktioniert hat.Ihr Problem ist eine Variante der Meldung "Nicht gefunden", wenn eine 32-Bit-Binärdatei auf einem 64-Bit-System ausgeführt wird : Sie haben eine ausführbare Datei, die einen dynamischen Loader erwähnt, der nicht vorhanden ist.
In Ihrem Fall befindet sich der dynamische Lader
/lib/ld-linux-x86-64.so.2
an einem anderen Ort/lib64/ld-linux-x86-64.so.2
. Der einfachste Weg, um Ihre Programme zum Laufen zu bringen, besteht darin, eine symbolische Verknüpfung zu erstellen:quelle