Cara memperbaiki "melewatkan /usr/lib/libc.a yang tidak kompatibel"

13

Saya mendapatkan kesalahan berikut ketika saya mencoba untuk membangun target Linux tertanam pada 64 bit 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

Saya perlu menggunakan versi make yang lebih lama (make381) mungkin karena kernelnya sudah tua dan dikustomisasi (2.6.22.19-39-sigma) dan targetnya adalah MIPS. Saya juga telah menginstal ncurses-static, glibc-static.i686, dan glibc-devel.i686 pada sistem saya. Apakah saya memerlukan libc.a yang kompatibel untuk make381? Jika demikian, Di mana saya dapat menemukannya? Jika tidak, di mana saya mencari di samping untuk memperbaiki bangunan ini?

Output konsol lengkap ada di sini .

jacknad
sumber
@MarkPlotnick: Sepertinya cross gcc tidak berfungsi, melainkan PC (x86) yang digunakan untuk membuat beberapa alat. Saya telah memperluas keluaran konsol di pos asli untuk menunjukkan ini dan menambahkan keluaran konsol lengkap di sini .
jacknad

Jawaban:

9

makeitu sendiri kemungkinan tidak banyak berhubungan dengan masalah. Gejala-gejalanya adalah khas karena menggunakan toolchain dan / atau perpustakaan yang salah. Keluaran menunjukkan bahwa penghubung yang digunakan adalah stok Fedora ld, yang pada 64bit Fedora berarti suatu toolchain yang mampu menghasilkan binari x86_64.

skipping incompatible /usr/lib/libc.a

memberitahu Anda, bahwa linker mencoba menghubungkan dengan /usr/lib/libc.atetapi menemukannya (biner) tidak kompatibel dengan sisa kode yang dikompilasi di md5_x86_64.odan mfsrv_x86_64.o. Ini biasanya muncul karena ketidakcocokan arsitektur - dalam hal ini tampaknya bahwa sistem build mencoba untuk menautkan file objek 64bit dengan pustaka 32bit (perhatikan bahwa perintah yang sama untuk biner 32bit dengan -m32baik-baik saja). Jadi sepertinya kompiler tidak mendapatkan opsi yang tepat ketika menghubungkan biner 64bit. Sebagai langkah pertama dalam debugging Anda mungkin ingin mencoba membangun secara manual - yaitu mengeluarkan perintah gagal di pohon membangun dengan tangan.

Yang juga agak mengejutkan (setidaknya bagi saya) dalam kasus Anda adalah ini:

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

yaitu: bagian dari build menggunakan cross toolchain dan sebagian menggunakan yang asli dan dalam rasa 64bit dan 32bit. Yang mungkin baik-baik saja, tetapi terlihat agak aneh.

peterph
sumber