Cách sửa lỗi bỏ qua không tương thích /usr/lib/libc.a phạm


13

Tôi gặp lỗi sau khi tôi cố gắng xây dựng mục tiêu Linux nhúng trên Fedora 16 64 bit (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

Tôi cần sử dụng một phiên bản cũ hơn của make (make381) vì kernel đã cũ và được tùy chỉnh (2.6.22.19-39-sigma) và mục tiêu là MIPS. Tôi cũng đã cài đặt ncurses-static, glibc-static.i686 và glibc-devel.i686 trên hệ thống của mình. Tôi có cần một libc.a tương thích cho make381 không? Nếu vậy, tôi có thể tìm thấy nó ở đâu? Nếu không, tôi sẽ tìm chỗ tiếp theo để sửa bản dựng này ở đâu?

Đầu ra giao diện điều khiển đầy đủ ở đây .


@MarkPlotnick: Không có vẻ như gcc chéo đang gặp sự cố mà là PC (x86) được sử dụng để xây dựng một số công cụ. Tôi đã mở rộng đầu ra giao diện điều khiển trong bài viết gốc để hiển thị điều này và thêm đầu ra giao diện điều khiển đầy đủ ở đây .
jacknad

Câu trả lời:


9

makebản thân nó có khả năng không liên quan nhiều đến vấn đề Các triệu chứng là điển hình của việc sử dụng sai toolchain và / hoặc thư viện. Đầu ra chỉ ra rằng trình liên kết đang sử dụng là chứng khoán Fedora ld, trên Fedbit 64 bit có nghĩa là một chuỗi công cụ có khả năng tạo ra các nhị phân x86_64.

skipping incompatible /usr/lib/libc.a

cho bạn biết rằng trình liên kết đã thử liên kết với /usr/lib/libc.anhưng thấy nó (nhị phân) không tương thích với phần còn lại của mã được biên dịch trong md5_x86_64.omfsrv_x86_64.o. Điều này thường phát sinh do sự không phù hợp về kiến ​​trúc - trong trường hợp này có vẻ như hệ thống xây dựng cố gắng liên kết các tệp đối tượng 64 bit với thư viện 32 bit (lưu ý rằng cùng một lệnh cho nhị phân 32 bit -m32đã hoàn thành tốt). Do đó, có vẻ như trình biên dịch không nhận được các tùy chọn phù hợp khi liên kết nhị phân 64 bit. Là bước đầu tiên trong việc gỡ lỗi, bạn có thể muốn thử xây dựng thủ công - tức là ban hành lệnh thất bại trong cây xây dựng bằng tay.

Điều cũng khá ngạc nhiên (ít nhất là đối với tôi) trong trường hợp của bạn là:

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

đó là: một phần của bản dựng sử dụng chuỗi công cụ chéo và một phần sử dụng bản gốc và trong cả hai hương vị 64 bit và 32 bit. Điều đó có thể ổn, nhưng trông hơi lạ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.