Sau nhiều giờ googling, tôi quyết định từ bỏ và hỏi các chuyên gia. Tôi đang cố gắng xây dựng một ứng dụng 32 bit (xgap nếu có ai quan tâm) trong 64 Ubuntu 11.10 của tôi. Tôi đã thêm CFLAGS = -m32 và LDFLAGS = -L / usr / lib32 trong tệp thực hiện. Các đối tượng được xây dựng thành 32 bit tốt. Bước cuối cùng là liên kết tất cả các đối tượng và thư viện cho các cửa sổ X vào tệp thực thi --- xgap này. Bằng cách nào đó nó liên tục cho tôi lỗi này:
gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -L/usr/lib32 -lXaw -lXmu -lXt -lXext -lX11 -lSM -lICE
/usr/bin/ld: skipping incompatible /usr/lib32/libXmu.so when searching for -lXmu
...
/usr/bin/ld: i386 architecture of input file `xcmds.o' is incompatible with i386:x86-64 output
...
Tôi đã cài đặt ia32-libs và hỗ trợ mutilib . Tôi nghĩ rằng tôi chỉ cần buộc trình liên kết tạo ra một đầu ra i386. Tôi đã cố gắng đặt hai cờ ld trong lệnh gcc của mình như được hiển thị ở trên: -melf_i386 và -oformat elf32-i386 . Nhưng điều xảy ra là gcc không tìm kiếm thư viện 32 bit trong / usr / lib32 nữa. Tôi tự hỏi nếu tôi cần phải đặt những lá cờ theo thứ tự cố định?
Cảm ơn cho bất kỳ ý tưởng và giúp đỡ!
EDIT: khi tôi thêm cờ -m32 trong lệnh gcc cuối cùng của mình (giai đoạn liên kết mà tôi tin), ngay cả khi tôi có cờ -L / usr / lib32, gcc không tìm kiếm trong / usr / lib32 nữa (thực sự lạ ...) và tạo ra lỗi sau:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so when searching for -lXaw
/usr/bin/ld: skipping incompatible /usr/lib/libXaw.so when searching for -lXaw
/usr/bin/ld: cannot find -lXaw
collect2: ld returned 1 exit status
Bất cứ ai có bất kỳ ý tưởng tại sao điều này xảy ra? Tôi đang sử dụng công cụ tự động để cấu hình và thực hiện. Tôi thực sự giỏi trong việc sửa đổi các tập tin script.
EIDT : Tôi đã giải quyết vấn đề. Tôi nghĩ rằng gcc đã mong đợi một kho lưu trữ thư viện tĩnh. Tôi đã sử dụng tập lệnh getlibs từ http://ubuntuforums.org/showthread.php?t=474790 để tải xuống tất cả các tài liệu lưu trữ .a cần thiết để liên kết. Sau đó gcc làm việc. Tôi nghĩ gcc đã tìm kiếm trong thư mục / usr / lib32 nhưng không tìm thấy kho lưu trữ .a nên đã tìm kiếm trong thư mục tiêu chuẩn là / usr / lib , nơi nó tìm thấy các tệp * .so không tương thích .
Nhưng câu hỏi đặt ra là: các tệp * .so trong / usr / lib32 / từ gói ia32-libs không thực sự có các thư viện cần thiết để liên kết? Những tập tin trong / usr / lib32 / được sử dụng để làm gì?