Я получаю следующую ошибку, когда пытаюсь построить встраиваемую цель 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? Если так, Где я могу найти это? Если нет, где я могу посмотреть дальше, чтобы исправить эту сборку?
Полный вывод консоли здесь .
Ответы:
make
само по себе, вероятно, не так много общего с этой проблемой. Симптомы типичны для использования неправильного набора инструментов и / или библиотек. Выходные данные указывают на то, что используемым компоновщиком является стандартная Fedorald
, которая на 64-битной Fedora будет означать набор инструментов, способный создавать двоичные файлы x86_64.говорит вам, что компоновщик пытался
/usr/lib/libc.a
скомпоновать, но обнаружил, что он (двоичный) несовместим с остальной частью скомпилированного кода вmd5_x86_64.o
иmfsrv_x86_64.o
. Обычно это происходит из-за несоответствия архитектуры - в этом случае кажется, что система сборки пытается связать 64-битные объектные файлы с 32-битной библиотекой (обратите внимание, что та же команда для 32-битного двоичного файла с выполнилась-m32
просто отлично). Таким образом, кажется, что компилятор не получает правильные опции при связывании 64-битного двоичного файла. В качестве первого шага в отладке вы можете попробовать собрать вручную - то есть вручную выполнить неудачную команду в дереве сборки.Что также довольно удивительно (по крайней мере для меня) в вашем случае это:
то есть: часть сборки, использующая перекрестный набор инструментов, и часть, использующая нативный, как в 64-битном, так и в 32-битном вариантах. Что может быть хорошо, но выглядит немного странно.
источник