Comment corriger «ignorer /usr/lib/libc.a incompatible»

13

J'obtiens l'erreur suivante lorsque j'essaie de créer une cible Linux intégrée sur un Fedora 16 64 bits (Verne):

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

J'ai besoin d'utiliser une ancienne version de make (make381) probablement car le noyau est ancien et personnalisé (2.6.22.19-39-sigma) et la cible est MIPS. J'ai également installé ncurses-static, glibc-static.i686 et glibc-devel.i686 sur mon système. Ai-je besoin d'une libc.a compatible pour make381? Si oui, où puis-je le trouver? Sinon, où dois-je chercher pour corriger cette version?

La sortie console complète est ici .

jacknad
la source
@MarkPlotnick: Il ne semble pas que le cross gcc se bloque mais plutôt le PC (x86) qui est utilisé pour construire certains des outils. J'ai développé la sortie de la console dans le message d'origine pour le montrer et ajouté la sortie complète de la console ici .
jacknad

Réponses:

9

makelui-même n'a probablement pas grand-chose à voir avec le problème. Les symptômes sont typiques de l'utilisation d'une chaîne d'outils et / ou de bibliothèques incorrectes. La sortie indique que l'éditeur de liens utilisé est le stock Fedora ld, ce qui sur Fedora 64 bits signifierait une chaîne d'outils capable de produire des binaires x86_64.

skipping incompatible /usr/lib/libc.a

vous indique que l'éditeur de liens a essayé de /usr/lib/libc.acréer un lien avec mais l'a trouvé (binaire) incompatible avec le reste du code compilé dans md5_x86_64.oet mfsrv_x86_64.o. Cela se produit généralement en raison d'une incompatibilité d'architecture - dans ce cas, il semble que le système de génération tente de lier un fichier objet 64 bits avec une bibliothèque 32 bits (notez que la même commande pour le binaire 32 bits -m32est passée très bien). Il semble donc que le compilateur n'obtienne pas les bonnes options lors de la liaison du binaire 64 bits. Comme première étape du débogage, vous voudrez peut-être essayer de construire manuellement - c'est-à-dire émettre manuellement la commande défaillante dans l'arborescence de construction.

Ce qui est également assez surprenant (du moins pour moi) dans votre cas est le suivant:

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

c'est-à-dire: une partie de la construction utilisant la chaîne d'outils croisée et une partie utilisant la native et dans les versions 64 bits et 32 ​​bits. Ce qui pourrait être bien, mais semble un peu étrange.

peterph
la source