Jak naprawić „pomijanie niekompatybilnego /usr/lib/libc.a”


13

Podczas próby zbudowania wbudowanego systemu Linux na 64-bitowej Fedorze 16 (Verne) pojawia się następujący błąd:

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

Potrzebuję użyć starszej wersji make (make381) prawdopodobnie dlatego, że jądro jest stare i dostosowane (2.6.22.19-39-sigma), a celem jest MIPS. Zainstalowałem także ncurses-static, glibc-static.i686 i glibc-devel.i686 w moim systemie. Czy potrzebuję kompatybilnego libc.a dla make381? Jeśli tak, to gdzie mogę to znaleźć? Jeśli nie, gdzie szukać dalej, aby naprawić tę kompilację?

Pełne wyjście konsoli znajduje się tutaj .


@MarkPlotnick: Nie wygląda to na awarię cross gcc, ale raczej na komputer PC (x86), który służy do budowania niektórych narzędzi. I Rozszerzyliśmy wyjście konsoli w oryginalnym poście, aby pokazać to i dodaje pełną moc konsoli tutaj .
jacknad

Odpowiedzi:


9

makesam prawdopodobnie nie ma wiele wspólnego z tym problemem. Objawy są typowe dla używania niewłaściwego łańcucha narzędzi i / lub bibliotek. Dane wyjściowe wskazują, że używany linker jest standardową Fedorą ld, co w 64-bitowej Fedorze oznaczałoby łańcuch narzędzi zdolny do tworzenia plików binarnych x86_64.

skipping incompatible /usr/lib/libc.a

informuje cię, że linker próbował połączyć się z, /usr/lib/libc.aale stwierdził, że (binarny) jest niekompatybilny z resztą skompilowanego kodu w md5_x86_64.oi mfsrv_x86_64.o. Zwykle wynika to z niedopasowania architektury - w tym przypadku wydaje się, że system kompilacji próbuje połączyć 64-bitowe pliki obiektowe z biblioteką 32-bitową (pamiętaj, że to samo polecenie dla 32-bitowego pliku binarnego -m32poszło dobrze). Wydaje się więc, że kompilator nie otrzymuje właściwych opcji podczas łączenia 64-bitowego pliku binarnego. Pierwszym krokiem w debugowaniu może być próba zbudowania ręcznie - tj. Ręczne wydanie błędnego polecenia w drzewie kompilacji.

W twoim przypadku zaskakujące jest (przynajmniej dla mnie):

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

to znaczy: część kompilacji przy użyciu krzyżowego zestawu narzędzi i część przy użyciu natywnego oraz w wersjach 64-bitowych i 32-bitowych. Co może być w porządku, ale wygląda nieco dziwnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.