Como corrigir “ignorando /usr/lib/libc.a” incompatível

11

Eu recebo o seguinte erro ao tentar criar um destino Linux incorporado em um 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

Eu preciso usar uma versão mais antiga do make (make381) provavelmente já que o kernel é antigo e personalizado (2.6.22.19-39-sigma) e o destino é MIPS. Eu também instalei ncurses-static, glibc-static.i686 e glibc-devel.i686 no meu sistema. Preciso de uma libc.a compatível para o make381? Se sim, onde posso encontrá-lo? Se não, onde eu olho para corrigir essa build?

A saída total do console é aqui .

    
por jacknad 01.04.2015 / 19:20

1 resposta

7

make em si provavelmente não tem muito a ver com o problema. Os sintomas são típicos do uso de toolchain e / ou bibliotecas erradas. A saída indica que o linker em uso é o Fedora ld , que no Fedora de 64 bits significaria um conjunto de ferramentas capaz de produzir binários x86_64.

skipping incompatible /usr/lib/libc.a

informa que o vinculador tentou vincular com /usr/lib/libc.a , mas achou (binário) incompatível com o restante do código compilado em md5_x86_64.o e mfsrv_x86_64.o . Isso normalmente ocorre devido a uma incompatibilidade de arquitetura - nesse caso, parece que o sistema de compilação tenta vincular um objeto de 64 bits a uma biblioteca de 32 bits (note que o mesmo comando para 32bit binário com -m32 foi muito bem). Assim, parece que o compilador não está recebendo as opções corretas ao vincular o binário de 64 bits. Como primeiro passo na depuração, talvez você queira tentar criar manualmente, ou seja, emitir o comando com falha na árvore de construção manualmente.

O que também é surpreendente (pelo menos para mim) no seu caso é este:

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

isto é: parte da compilação usando o cross toolchain e parte usando o nativo e em ambos os sabores de 64 bits e 32 bits. O que pode estar certo, mas parece um pouco estranho.

    
por 03.04.2015 / 00:08