Как скомпилировать 32-битное приложение x86 в 64-битной среде x86? - PullRequest
0 голосов
/ 05 декабря 2011

Как скомпилировать 32-битное приложение x86 в 64-битной среде x86?

Любая команда для cc / ld / ar, включая опции?Спасибо.

Любые ссылки приветствуются.Спасибо.

Примечание: возьмите, например, код c.

Ответы [ 4 ]

3 голосов
/ 05 декабря 2011

Чтобы скомпилировать и связать исходный файл C с 64-битным мультибиблиотечным GCC, вы можете сделать следующее:

gcc -m32 -c somefile.c
gcc -m32 somefile.o -o myprog

Обратите внимание, что все 32-битные библиотеки должны быть установлены и использоваться мультибиблиотечным компилятором.

ar должно работать, если построено правильно, не рекомендуется вызывать ld напрямую, потому что его параметры радикально отличаются от GCC. Просто свяжись с GCC.


Относительно того, почему «не рекомендуется вызывать ld напрямую»: если вы все gcc будете ссылаться, он точно будет знать, где находятся системные / исполняемые библиотеки, а также о любых специфичных для платформы параметрах, которые ему необходимы. перейти к ld. При прямом вызове ld вам необходимо позаботиться обо всем этом. Здесь важны опции для 32-х и 64-х битных, а также правильные каталоги библиотек.

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

Да, мне нужно -D_FILE_OFFSET_BITS = 64, иногда -m32 иногда создает некоторые проблемы, поэтому вы должны попробовать сами.

c++ -m32 -D_FILE_OFFSET_BITS=64 foo.c -o foo

Но это для обратного.Компиляция 64-битных программ на 32-битных боксах.

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

Флаг -m32 - это все, что вам нужно, т. Е.

gcc -m32 ...

Если вы получили сообщение об ошибке, вам могут потребоваться 32-битные библиотеки, которые могут быть названы аналогично glibc-devel.i686.Это имя пакета в Fedora (используется yum), остальные дистрибутивы Linux должны быть похожими.

В Debian & Ubuntu вам понадобятся пакеты gcc-multilib и ia32-libs-dev.

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

Да, просто используйте -m32 и убедитесь, что у вас установлены все 32-битные инструменты и библиотеки (не все дистрибутивы x86-64 включают их по умолчанию, поэтому вам может потребоваться apt-get или yast или что-то еще установить эти).

$ gcc -m32 -Wall foo.c -o foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...