วิธีแก้ไข“ การข้าม /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: ดูเหมือนว่า cross gcc จะล้มเหลว แต่เป็นพีซี (x86) ที่ใช้สร้างเครื่องมือบางอย่าง ฉันได้ขยายการส่งออกคอนโซลในโพสต์ต้นฉบับในการแสดงนี้และเพิ่มผลผลิตคอนโซลเต็มรูปแบบที่นี่
jacknad

คำตอบ:


9

makeตัวเองมีแนวโน้มที่จะไม่เกี่ยวข้องกับปัญหา อาการเป็นเรื่องปกติของการใช้ toolchain และ / หรือไลบรารีที่ไม่ถูกต้อง ผลลัพธ์บ่งชี้ว่าตัวเชื่อมโยงที่ใช้อยู่นั้นคือ Fedora ldซึ่งใน 64 บิต Fedora จะหมายถึง toolchain ที่สามารถผลิตไบนารี x86_64 ได้

skipping incompatible /usr/lib/libc.a

จะบอกคุณว่าลิงเกอร์พยายามเชื่อมโยงกับ/usr/lib/libc.aแต่พบว่ามัน (binary) เข้ากันไม่ได้กับส่วนที่เหลือของรหัสเรียบเรียงในและ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

นั่นคือ: ส่วนหนึ่งของบิลด์ที่ใช้ cross toolchain และส่วนหนึ่งใช้เนทิฟดั้งเดิมและทั้ง 64 บิตและ 32 บิต ซึ่งอาจจะใช้ได้ แต่ดูแปลกไปหน่อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.