Собрать 32-битную версию на 64-битной Linux, используя скрипт configure для automake? - PullRequest
50 голосов
/ 16 июля 2010

Я использую 64-битную систему, но хочу набор 32-битных двоичных файлов. Какие опции я должен передать скрипту configure для генерации 32-битного / x86 make-файла?

Ответы [ 5 ]

66 голосов
/ 25 июля 2010

Передача следующего аргумента для настройки скрипта позволила мне собрать 32-битную библиотеку на 64-битной Linux

./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
45 голосов
/ 19 июля 2013

Ответ Джека неполный.

Вам нужна поддержка компилятора / libc для 32-битной компиляции.В некоторых дистрибутивах, таких как Ubuntu, вам нужно установить пакеты gcc-multilib и / или g++-multilib:

sudo apt-get install gcc-multilib g++-multilib

Затем вы можете вызвать configure, как вы сказали, указать 32-битный хост и передатьФлаги 32-битной компиляции:

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"

Если у вас не установлен multilib, вы получите сообщение об ошибке типа configure: error: C compiler cannot create executables при пропуске флага -m32.

7 голосов
/ 21 февраля 2015

Я добился большего успеха, установив вместо этого собственный компилятор.Таким образом, все тесты конфигурации, даже те, которые используют собственные CFLAGS, работали правильно:

./configure CC="gcc -m32" CXX="g++ -m32"

Вам все еще нужны 32-битные версии всех библиотек, которые приложение использует, конечно, поэтому любые ошибки, связанные с отсутствующими библиотекамиссылаясь на 32-битные.

3 голосов
/ 16 июля 2010

Предполагается, что gcc / g ++:

CPPFLAGS=-m32 ./configure ...
1 голос
/ 11 июля 2015

Альтернативным способом, описанным выше, может быть (если есть) использование специального компилятора x86.Строка конфигурации будет выглядеть следующим образом (я назвал x86-tools после шаблона " -x86"):

CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure
...