Як виправити "пропуск несумісного /usr/lib/libc.a"


13

Я отримую таку помилку, коли намагаюся створити вбудовану ціль Linux на 64-бітній Fedora 16 (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

Мені потрібно використовувати старішу версію make (make381), ймовірно, оскільки ядро ​​старе та налаштоване (2.6.22.19-39-sigma), а мета - MIPS. Я також встановив ncurses-static, glibc-static.i686 та glibc-devel.i686 у своїй системі. Чи потрібно мені сумісний libc.a для make381? Якщо так, то де я це можу знайти? Якщо ні, то де я шукаю далі, щоб виправити цю збірку?

Повний вихід консолі знаходиться тут .


@MarkPlotnick: Це виглядає не так, як перетинається gcc, а швидше ПК (x86), який використовується для побудови деяких інструментів. Я розширив консольний висновок у вихідному повідомленні , щоб показати це і додав повний консольний висновок тут .
Джекнад

Відповіді:


9

makeсама по собі, мабуть, не дуже спільна з проблемою. Симптоми характерні для використання неправильної ланцюжка інструментів та / або бібліотек. Вихідний сигнал вказує на те, що використовуваним лінкером є акція Fedora ld, що на 64-бітній Fedora означатиме ланцюжок інструментів, здатну виробляти x86_64 бінарні файли.

skipping incompatible /usr/lib/libc.a

повідомляє вам, що лінкер намагався зв’язатися з, /usr/lib/libc.aале виявив його (бінарним) несумісним з рештою складеного коду в md5_x86_64.oі mfsrv_x86_64.o. Зазвичай це виникає через невідповідність архітектури - в цьому випадку здається, що система збірки намагається зв’язати 64-бітові об’єктні файли з 32-бітовою бібліотекою (зауважте, що та сама команда для 32-бітового бінарного файлу -m32пройшла просто добре). Таким чином, здається, що компілятор не отримує правильних варіантів під час з'єднання 64-бітового двійкового файлу. В якості першого кроку в налагодженні ви можете спробувати створити вручну - тобто, вручну випустити команду провалу в дереві збірки.

Що також дивно (принаймні для мене) у вашому випадку це:

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

тобто частина складання з використанням хрестоподібної ланцюжка інструментів та частина з використанням нативного та 64-бітового та 32-бітового ароматів. Що може бути все в порядку, але виглядає дещо дивно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.