1

我正在尝试使用 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.

如果我尝试构建一个将 -m32 传递给 CFLAGS、CXXFLAGS 和 LDFLAGS 的 32 位二进制文​​件,它可以正常工作。

从 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++。

有什么建议么?

4

1 回答 1

2

对于典型的 autotools 配置,假设 libtool 已集成,请尝试:

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

OPT其他编译器标志在哪里,例如,-O2等。

-staticin的显式使用$CFLAGS$CXXFLAGS可能没有做你想做的事。

编辑:实际上可能需要使用: CC="gcc -m32", CXX="g++ -m32"(取决于编译器)以获得所需的模式以进行到链接阶段。我以前在使用其他软件包时遇到过这种情况。

于 2012-12-08T11:17:34.893 回答