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 .
Réponses:
make
lui-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 Fedorald
, ce qui sur Fedora 64 bits signifierait une chaîne d'outils capable de produire des binaires x86_64.vous indique que l'éditeur de liens a essayé de
/usr/lib/libc.a
créer un lien avec mais l'a trouvé (binaire) incompatible avec le reste du code compilé dansmd5_x86_64.o
etmfsrv_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-m32
est 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:
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.
la source