Как собрать статический 32-битный двоичный файл на 64-битной машине/ОС с помощью скрипта настройки?

Я пытаюсь создать двоичный файл GNU x86 со статической связью в 64-битной системе CentOS, используя скрипт automake configure. Я могу создать статический 64-битный двоичный файл и динамический 32-битный без проблем, но я не могу понять, как создать статический 32-битный двоичный файл.

Я пробовал следующую команду настройки:

./configure --build=i686-pc-linux-gnu CFLAGS='-static -m32' CXXFLAGS='-static -m32'

Но я получаю следующее сообщение об ошибке:

# ./configure --build=i686-pc-linux-gnu CFLAGS='-static -m32' CXXFLAGS='-static -m32'
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking whether the C++ compiler works... no
configure: error: in `/tmp/iperf-2.0.5':
configure: error: C++ compiler cannot create executables
See `config.log' for more details.

Если я попытаюсь создать только 32-битный двоичный файл, передав -m32 в CFLAGS, CXXFLAGS и LDFLAGS, он будет работать нормально.

Из файла config.log я вижу:

configure:3104: $? = 1
configure:3124: checking whether the C++ compiler works
configure:3146: g++ -static -m32   conftest.cpp  >&5
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

Но у меня установлены как 32-битная, так и 64-битная версии libstdc++.

Какие-либо предложения?


person Eric B.    schedule 07.12.2012    source источник


Ответы (1)


Для типичной настройки автоинструментов, предполагая, что libtool интегрирован, попробуйте:

> env CFLAGS="[OPT] -m32" CXXFLAGS="[OPT] -m32" \
  ./configure --host=i686-pc-linux-gnu --enable-static [--disable-shared]

где OPT — другие флаги компилятора, например, -O2 и т. д.

Явное использование -static в $CFLAGS, $CXXFLAGS, вероятно, не делает того, что вы хотите.

Изменить: может оказаться необходимым использовать: CC="gcc -m32", CXX="g++ -m32" (в зависимости от компилятора) для того, чтобы требуемый режим переносился на стадию компоновки. Я сталкивался с этим раньше с другими пакетами.

person Brett Hale    schedule 08.12.2012