我使用的是64位系统,但是想要一组32位二进制文件。我需要在configure脚本中传递什么选项来生成一个32位/x86的makefile?
将以下参数传递给configure脚本使我能够在64位Linux上构建32位库
./configure --build=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
杰克的回答不完整。
你需要编译器/库的32位支持。在像Ubuntu这样的发行版中,你需要做的是安装gcc-multilib
和/或g++-multilib
软件包:
sudo apt-get install gcc-multilib g++-multilib
那么您可以按照您说的那样调用配置,指定32位主机并传递32位编译标志:
./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
如果您没有安装multilib,当传递-m32标志时,您将会得到如下错误:configure: error: C compiler cannot create executables
。g++-multilib
。除此之外,您还需要启用32位运行时库,如 https://wiki.debian.org/Multiarch/HOWTO 中所述。该页面底部的命令 dpkg --add-architecture i386; apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
是一个很好的起点。您现在可以根据需要安装额外的库,例如要构建需要 SSL 的东西,您可以使用 apt-get install libssl-dev:i386
。 - Michael Firth./configure --help
表示(由 autoconf 生成的脚本):系统类型: --build=BUILD 配置为在 BUILD 上构建 [猜测] --host=HOST 交叉编译以在 HOST 上运行程序 [BUILD]
- real-or-random我通过设置自定义编译器取得了更好的成功。这样,所有的配置测试,甚至使用自定义CFLAGS的测试都能正常工作:
./configure CC="gcc -m32" CXX="g++ -m32"
当然,你仍然需要应用程序所使用的所有库的32位版本,因此任何关于缺少库的错误都是指32位版本。
CPPFLAGS=-m32 ./configure ...
如果您有的话,另一种实现上述内容的方法是使用专用的x86编译器。这样,配置行将如下所示(我将x86工具命名为“<toolname>-x86”):
CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure
uname -m
返回i86pc
。大约10个依赖库中除了一个都错误地检测到了平台。只有OpenSSL正确地将其识别为x86_64。 - jww