Після годин гугла, я вирішу відмовитись і запитати вас у експертів. Я намагаюся створити 32-розрядний додаток (xgap, якщо хтось зацікавлений) в моєму 64 Ubuntu 11.10. Я додав CFLAGS = -m32 та LDFLAGS = -L / usr / lib32 у makefile. Об'єкти вбудовані в 32-ти бітовий тон. Останній крок - з'єднати всі об’єкти та бібліотеки для X windows у цей виконуваний --- xgap. Якось він і надає мені цю помилку:
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
...
Я встановив ia32-libs та mutilib підтримку . Я думаю, що мені просто потрібно змусити лінкер генерувати вихід i386. Я намагався поставити два прапори ld у своїй команді gcc, як показано вище: -melf_i386 та -oformat elf32-i386 . Але що трапляється, що gcc більше не шукає 32-бітну бібліотеку в / usr / lib32 . Цікаво, чи потрібно мені поставити ці прапори в певному порядку?
Дякуємо за будь-яку ідею та допомогу!
EDIT: коли я додаю прапор -m32 в останню команду gcc (я вважаю, що етап зв’язку), навіть якщо у мене є прапор -L / usr / lib32, gcc більше не шукає в / usr / lib32 (дійсно weird ...) та створює таку помилку:
/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
Хтось має ідею, чому це відбувається? Я використовую автоматичний інструмент для налаштування та створення. Я дуже добре модифікую ці файли сценаріїв.
EIDT : Я вирішив проблему. Я думаю, що gcc очікував статичного архіву бібліотеки. Я використовував сценарій getlibs з http://ubuntuforums.org/showthread.php?t=474790, щоб завантажити всі архіви .a, необхідні для посилання. Потім працював gcc . Я думаю, що gcc здійснив пошук у каталозі / usr / lib32, але не знайшов архівів .a, тому продовжив пошук у стандартному каталозі, який є / usr / lib , де він знаходить несумісні * * .so файли.
Але тоді питання: у файлах * .so в / usr / lib32 / з пакету ia32-libs насправді немає бібліотек, необхідних для посилання? Для чого використовуються ті файли в / usr / lib32 / ?