Как да изградя статичен 32-битов двоичен файл на 64-битова машина/ОС със скрипт за конфигуриране?

Опитвам се да създам статично свързан GNU x86 двоичен файл на 64-битова CentOS система, използвайки скрипта за конфигуриране на automake. Мога да създам статичен 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)


За типично конфигуриране на autotools, ако приемем, че 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