使用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