“Uyumsuz /usr/lib/libc.a atlama” nasıl düzeltilir?


13

64 bit Fedora 16 (Verne) üzerine gömülü bir Linux hedefi oluşturmaya çalıştığımda aşağıdaki hatayı alıyorum:

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

Çekirdek eski ve özelleştirilmiş (2.6.22.19-39-sigma) ve hedef MIPS olduğundan, eski bir make (make381) sürümü kullanmam gerekiyor. Ayrıca ncurses-static, glibc-static.i686 ve glibc-devel.i686'yı sistemime yükledim. Make381 için uyumlu bir libc.a'ya ihtiyacım var mı? Öyleyse, nerede bulabilirim? Değilse, bu yapıyı düzeltmek için nereye bakacağım?

Konsol çıktısının tamamı burada .


@ MarkPlotnick: Çapraz gcc çöküyor gibi değil, bazı araçları oluşturmak için kullanılan PC (x86) gibi görünüyor. Bunu göstermek için orijinal yayında konsol çıktısını genişlettim ve tam konsol çıktısını buraya ekledim .
jacknad

Yanıtlar:


9

makekendisi vardır muhtemelen sorunla yapmak için çok fazla. Semptomlar yanlış alet zinciri ve / veya kitaplık kullanımı için tipiktir. Çıktı, kullanılan bağlayıcının stok Fedora ldolduğunu ve 64bit Fedora'da x86_64 ikili dosyaları üretebilen bir araç zinciri anlamına geldiğini gösteriyor.

skipping incompatible /usr/lib/libc.a

Bağlayıcı ile bağlantı çalıştı, söyler /usr/lib/libc.aama bunu (ikili) derlenmiş kod kalanı ile uyumsuz bulundu md5_x86_64.ove mfsrv_x86_64.o. Bu genellikle bir mimari uyuşmazlığı nedeniyle ortaya çıkar - bu durumda derleme sistemi bir 64 bit nesne dosyalarını 32 bit kitaplığa bağlamaya çalışır (32 bit ikili için aynı komutun -m32gayet iyi geçtiğini unutmayın ). Bu nedenle, 64bit ikili dosyasını bağlarken derleyici doğru seçenekleri alamıyor gibi görünüyor. Hata ayıklamanın ilk adımı olarak, el ile oluşturmayı denemek isteyebilirsiniz - yani derleme ağacındaki başarısız komutu el ile vermek.

Sizin durumunuzda da (en azından benim için) oldukça şaşırtıcı olan şey şudur:

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

yani çapraz takım zincirini kullanan yapının bir kısmı ve doğal olanı kullanan kısmı ve hem 64bit hem de 32bit lezzetlerinde. Bu iyi olabilir, ama biraz garip görünüyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.