我正在尝试使用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位版本。
有什么建议吗?
答案 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"
(取决于编译器),以便将所需模式传递到链接阶段。我之前遇到过其他包。