Come risolvere "saltare incompatibile /usr/lib/libc.a"


13

Ottengo il seguente errore quando provo a creare una destinazione Linux incorporata su un Fedora 16 (Verne) a 64 bit:

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

Devo usare una versione precedente di make (make381) probabilmente poiché il kernel è vecchio e personalizzato (2.6.22.19-39-sigma) e il target è MIPS. Ho anche installato ncurses-static, glibc-static.i686 e glibc-devel.i686 sul mio sistema. Ho bisogno di un libc.a compatibile per make381? In tal caso, dove posso trovarlo? In caso contrario, dove guarderò accanto per correggere questa build?

L'output della console completa è qui .


@MarkPlotnick: non sembra che il cross gcc stia andando in crash ma piuttosto il PC (x86) che viene utilizzato per costruire alcuni degli strumenti. Ho espanso l'output della console nel post originale per mostrarlo e ho aggiunto l'output completo della console qui .
Jacknad,

Risposte:


9

makedi per sé probabilmente non ha molto a che fare con il problema. I sintomi sono tipici dell'utilizzo di toolchain e / o librerie errate. L'output indica che il linker in uso è lo stock Fedora ld, che su Fedora a 64 bit significherebbe una toolchain in grado di produrre binari x86_64.

skipping incompatible /usr/lib/libc.a

ti dice che il linker ha provato a collegarsi /usr/lib/libc.ama lo ha trovato (binario) incompatibile con il resto del codice compilato in md5_x86_64.oe mfsrv_x86_64.o. Ciò si verifica in genere a causa di una mancata corrispondenza dell'architettura: in questo caso sembra che il sistema di compilazione tenti di collegare un file oggetto a 64 bit con una libreria a 32 bit (si noti che lo stesso comando per binario a 32 bit è -m32andato bene). Quindi sembra che il compilatore non stia ottenendo le giuste opzioni quando collega il binario a 64 bit. Come primo passo nel debug potresti voler provare a compilare manualmente, ovvero lanciando manualmente il comando non riuscito nell'albero di compilazione.

Ciò che è anche piuttosto sorprendente (almeno per me) nel tuo caso è questo:

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

vale a dire: parte della build che utilizza la toolchain incrociata e parte che utilizza quella nativa e in entrambe le versioni a 64 e 32 bit. Il che potrebbe andare bene, ma sembra un po 'strano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.