Сборка 32-битного приложения в 64-битной Ubuntu - PullRequest
6 голосов
/ 07 декабря 2011

После нескольких часов поисков, я решил сдаться и спросить у вас экспертов.Я пытаюсь создать 32-разрядное приложение (xgap, если кто-то заинтересован) в моей 64-й версии Ubuntu 11.10.Я добавил CFLAGS = -m32 и LDFLAGS = -L / usr / lib32 в make-файл.Объекты встроены в 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 и -формат elf32-i386 .Но происходит то, что gcc больше не ищет 32-битную библиотеку в / usr / lib32 .Интересно, нужно ли мне поставить эти флаги в каком-то фиксированном порядке?

Спасибо за любую идею и помощь!

EDIT : когда я добавляю флаг -m32 в мою последнюю команду gcc (я считаю, что это этап связывания), даже если яесли установлен флаг -L / usr / lib32, gcc больше не выполняет поиск в / usr / lib32 (очень странно ...) и выдает следующую ошибку:

/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

Любой имеет представлениепочему это происходит?Я использую автоматический инструмент для настройки и создания.Я действительно хорош в модификации этих файлов скриптов.

Ответы [ 2 ]

6 голосов
/ 07 декабря 2011

Вам также необходимо использовать ссылку с -m32.

gcc -m32 -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

Учитывая все обстоятельства, я думаю, что вы должны быть в состоянии отбросить -L/usr/lib32 при использовании -m32.

1 голос
/ 08 декабря 2011

Я решил проблему. Я думаю, что 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 / ?

...