Как исправить «пропуск несовместимого /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? Если так, Где я могу найти это? Если нет, где я могу посмотреть дальше, чтобы исправить эту сборку?

Полный вывод консоли здесь .

jacknad
источник
@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-битном вариантах. Что может быть хорошо, но выглядит немного странно.

peterph
источник