如何使用configure脚本在64位机器/操作系统上构建静态32位二进制文​​件?

时间:2012-12-07 03:57:11

标签: gcc x86 autotools configure automake

我正在尝试使用automake配置脚本在64位CentOS系统上构建静态链接的GNU x86二进制文件。我能够构建静态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

但我安装了libstdc ++的32位和64位版本。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

对于典型的autotools configure,假设集成了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"(取决于编译器),以便将所需模式传递到链接阶段。我之前遇到过其他包。