Я использую 64-битную систему, но мне нужен набор 32-битных двоичных файлов. Какие параметры я должен передать в сценарий настройки для создания make-файла 32bit/x86?
Собрать 32-битную версию на 64-битной Linux с помощью скрипта automake configure?
Ответы (5)
Передача следующего аргумента для скрипта configure позволила мне собрать 32-битную библиотеку в 64-битной Linux.
./configure --build=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
configure: error: C++ compiler cannot create executables
.
- person Craig McQueen; 18.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
.
--build
, а не --host
. --host
следует использовать тогда и только тогда, когда вы создаете компилятор. Это все еще работает, потому что есть много людей, которые не используют RTFM и пишут сценарии, использующие --host
вместо --build
, а люди, занимающиеся автоинструментами, уже сломали достаточно вещей.
- person Jonathan Baldwin; 24.09.2013
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
./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-битным.
Предполагая gcc/g++:
CPPFLAGS=-m32 ./configure ...
Альтернативным способом описанным выше вещам может быть (если у вас есть) использование специального компилятора 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
uname -m
возвращаетi86pc
. Все, кроме одной, из примерно 10 зависимых библиотек неправильно определили платформу. Только OpenSSL правильно определил его как x86_64. - person jww   schedule 29.03.2017