使用automakeconfiguration脚本在64位Linux上构build32位?

我使用的是64位系统,但需要一组32位的二进制文件。 我必须将哪些选项传递给configuration脚本以生成32位/ x86生成文件?

通过以下参数来configuration脚本允许我在64位Linux上构build32位库

 ./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 

杰克的回答是不完整的。

您需要编译器/ libc支持32位编译。 在Ubuntu的一些发行版中,你需要做的是安装包gcc-multilib和/或g++-multilib

 sudo apt-get install gcc-multilib g++-multilib 

然后你可以像你说的那样调用configure,指定一个32位主机并传递32位编译标志:

 ./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 

如果你没有安装multilib,你会得到一个像configure: error: C compiler cannot create executables这样的错误configure: error: C compiler cannot create executables在传递-m32标志时configure: error: C compiler cannot create executables

我通过设置自定义编译器取得了更好的成功。 这样所有的configurationtesting,甚至是使用自定义CFLAGS的configurationtesting都能正常工作:

 ./configure CC="gcc -m32" CXX="g++ -m32" 

当然你仍然需要应用程序使用的所有库的32位版本,所以关于丢失的库的任何错误都是指32位的。

假设gcc / g ++:

 CPPFLAGS=-m32 ./configure ... 

上述东西的另一种方法是(如果有的话)使用专用的x86编译器。 configuration行会是这样的(我在模式“<toolname> -x86”之后命名x86-工具):

 CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure