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

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

Ответ 1

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

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

Ответ 2

Ответ Джека не завершен.

Вам нужна поддержка компилятора /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.

Ответ 3

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

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

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

Ответ 4

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

CPPFLAGS=-m32 ./configure ...

Ответ 5

Альтернативный способ описанных выше действий был бы (если есть) использовать выделенный компилятор x86. Тогда строка конфигурации будет выглядеть так (я назвал x86-инструменты после шаблона "<toolname> -x86" ):

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