Ich erhalte die folgende Fehlermeldung, wenn ich versuche, ein eingebettetes Linux-Ziel auf einem 64-Bit-Fedora 16 (Verne) zu erstellen:
make[3]: Entering directory `/export/home/git/minerva-5.x/third_party/multifiles'
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include -c -o md5.o md5.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include -c -o bitmapfs.o bitmapfs.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include -c -o mfcln.o mfcln.c
mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c
gcc -O -Wall -m32 -c -o mfsrv_x86_32.o mfsrv.c
gcc -O -m32 -o mfsrv32 md5_x86_32.o mfsrv_x86_32.o
gcc -O -m32 -static -o mfsrv32-static md5_x86_32.o mfsrv_x86_32.o
gcc -O -Wall -c -o md5_x86_64.o md5.c
gcc -O -Wall -c -o mfsrv_x86_64.o mfsrv.c
gcc -O -o mfsrv64 md5_x86_64.o mfsrv_x86_64.o
gcc -O -static -o mfsrv64-static md5_x86_64.o mfsrv_x86_64.o
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.6.3/../../../libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make[3]: *** [mfsrv64-static] Error 1
Ich muss wahrscheinlich eine ältere Version von make (make381) verwenden, da der Kernel alt und angepasst ist (2.6.22.19-39-sigma) und das Ziel MIPS ist. Ich habe auch ncurses-static, glibc-static.i686 und glibc-devel.i686 auf meinem System installiert. Benötige ich eine kompatible libc.a für make381? Wenn ja, wo finde ich es? Wenn nicht, wo sehe ich als nächstes nach, um diesen Build zu reparieren?
Die vollständige Konsolenausgabe finden Sie hier .
Antworten:
make
selbst hat wohl nicht viel mit dem problem zu tun. Die Symptome sind typisch für die Verwendung falscher Toolchain und / oder Bibliotheken. Die Ausgabe gibt an, dass der verwendete Linker das Standard-Fedora istld
, was auf 64-Bit-Fedora eine Toolchain bedeuten würde, die x86_64-Binärdateien erzeugen kann.teilt Ihnen mit, dass der Linker versucht hat, eine Verknüpfung zu
/usr/lib/libc.a
erstellen, diese jedoch als (binär) inkompatibel mit dem Rest des kompilierten Codes inmd5_x86_64.o
und befunden hatmfsrv_x86_64.o
. Dies ist in der Regel auf eine nicht übereinstimmende Architektur zurückzuführen. In diesem Fall scheint das Build-System zu versuchen, 64-Bit-Objektdateien mit einer 32-Bit-Bibliothek zu verknüpfen (beachten Sie, dass derselbe Befehl für 32-Bit-Binärdateien einwandfrei-m32
durchlaufen wurde). Daher scheint es, dass der Compiler beim Verknüpfen der 64-Bit-Binärdatei nicht die richtigen Optionen erhält. Als ersten Schritt beim Debuggen möchten Sie möglicherweise versuchen, manuell zu erstellen - dh den fehlgeschlagenen Befehl im Build-Baum manuell ausgeben.Was (zumindest für mich) in Ihrem Fall auch ziemlich überraschend ist, ist Folgendes:
Das heißt: Teil des Builds unter Verwendung der Cross-Toolchain und Teil des nativen Builds und sowohl in den 64-Bit- als auch in den 32-Bit-Varianten. Was vielleicht in Ordnung ist, aber ein bisschen seltsam aussieht.
quelle