Собрать 32-битную версию на 64-битной Linux с помощью скрипта automake configure?

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


person Jack Nock    schedule 16.07.2010    source источник
comment
Плюс один. Я пытаюсь собрать Git для Solaris. uname -m возвращает i86pc. Все, кроме одной, из примерно 10 зависимых библиотек неправильно определили платформу. Только OpenSSL правильно определил его как x86_64.   -  person jww    schedule 29.03.2017


Ответы (5)


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

./configure --build=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
person Jack Nock    schedule 25.07.2010
comment
У меня не работает :( Пожалуйста, помогите мне в stackoverflow.com/questions/13780319/ - person m93a; 08.12.2012
comment
Это не сработало для меня при попытке создать библиотеку. Это дало мне сообщение configure: error: C++ compiler cannot create executables. - person Craig McQueen; 18.07.2013
comment
Этот ответ неполный, поэтому иногда вы можете получить ошибку компилятора, которая не может создать исполняемые файлы. Смотрите мой ответ в этой же теме - person volpato; 19.07.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.

person volpato    schedule 19.07.2013
comment
Некоторые программы по умолчанию компилируют 32-битные на amd64 (например, вино), возможно, в дополнение к 64-битным, и должны иметь возможность находить мультибиблиотеки, если они установлены. Кажется, это не относится к ОП. Кроме того, Джек был прав в одном — должно быть --build, а не --host. --host следует использовать тогда и только тогда, когда вы создаете компилятор. Это все еще работает, потому что есть много людей, которые не используют RTFM и пишут сценарии, использующие --host вместо --build, а люди, занимающиеся автоинструментами, уже сломали достаточно вещей. - person Jonathan Baldwin; 24.09.2013
comment
пакеты *-multilib больше не существуют в стабильной версии Debian. - person Braiam; 22.03.2014
comment
Я все еще вижу g++-multilib в Debian Stretch. Кроме того, вам потребуется включить 32-разрядные библиотеки времени выполнения, как описано на wiki.debian.org. /Мультиархив/HOWTO. Команды внизу этой страницы dpkg --add-architecture i386; apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386 являются хорошей отправной точкой. Вы можете установить дополнительные библиотеки по мере необходимости, например, чтобы создать что-то, требующее SSL, вы можете apt-get install libssl-dev:i386. - person Michael Firth; 29.08.2019
comment
@JonathanBaldwin ./configure --help говорит (для сценария, сгенерированного autoconf): System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] - person real-or-random; 04.03.2021

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

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

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

person Malvineous    schedule 20.02.2015

Предполагая gcc/g++:

CPPFLAGS=-m32 ./configure ...
person R Samuel Klatchko    schedule 16.07.2010
comment
Спасибо за ответ. Сценарий configure по-прежнему устанавливает тип системы сборки и тип хост-системы на x86_64-unknown-linux-gnu. Вы знаете, как переопределить их? - person Jack Nock; 16.07.2010

Альтернативным способом описанным выше вещам может быть (если у вас есть) использование специального компилятора x86. Тогда строка конфигурации будет выглядеть так (я назвал x86-tools по образцу «‹toolname›-x86»):

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