Cómo arreglar "omitiendo /usr/lib/libc.a incompatible"

13

Recibo el siguiente error cuando intento construir un objetivo Linux integrado en un Fedora 16 (Verne) de 64 bits:

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

Necesito usar una versión anterior de make (make381) probablemente porque el kernel es antiguo y personalizado (2.6.22.19-39-sigma) y el objetivo es MIPS. También he instalado ncurses-static, glibc-static.i686 y glibc-devel.i686 en mi sistema. ¿Necesito una libc.a compatible para make381? Si es así, ¿dónde puedo encontrarlo? Si no es así, ¿dónde busco después para corregir esta compilación?

La salida completa de la consola está aquí .

Jacknad
fuente
@ MarkPlotnick: No parece que el cross gcc se esté bloqueando, sino la PC (x86) que se usa para construir algunas de las herramientas. Expandí el resultado de la consola en la publicación original para mostrar esto y agregué el resultado completo de la consola aquí .
jacknad

Respuestas:

9

makesí tiene probablemente no tiene mucho que ver con el problema. Los síntomas son típicos del uso de cadenas de herramientas y / o bibliotecas incorrectas. La salida indica que el enlazador en uso es el stock Fedora ld, que en Fedora de 64 bits significaría una cadena de herramientas capaz de producir binarios x86_64.

skipping incompatible /usr/lib/libc.a

le dice que el enlazador intentó enlazar /usr/lib/libc.apero lo encontró (binario) incompatible con el resto del código compilado en md5_x86_64.oy mfsrv_x86_64.o. Esto generalmente surge debido a una falta de coincidencia de la arquitectura; en este caso, parece que el sistema de compilación intenta vincular un archivo de objeto de 64 bits con una biblioteca de 32 bits (tenga en cuenta que el mismo comando para binario de 32 bits -m32fue correcto). Por lo tanto, parece que el compilador no obtiene las opciones correctas al vincular el binario de 64 bits. Como primer paso en la depuración, puede intentar compilar manualmente, es decir, emitir el comando de falla en el árbol de compilación a mano.

Lo que también es bastante sorprendente (al menos para mí) en su caso es esto:

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

es decir: parte de la compilación usando la cadena de herramientas cruzada y parte usando la nativa y en los sabores de 64 bits y 32 bits. Lo que podría estar bien, pero parece un poco extraño.

Peterph
fuente