使用automake配置脚本在64位Linux上构建32位?

Jac*_*ock 51 automake autotools configure

我使用的是64位系统但需要一组32位二进制文​​件.我必须将哪些选项传递给configure脚本才能生成32位/ x86 makefile?

Jac*_*ock 68

传递以下参数来配置脚本允许我在64位Linux上构建32位库

./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
Run Code Online (Sandbox Code Playgroud)

  • 在尝试构建库时,它对我不起作用.它给了我一个消息`configure:error:C++编译器无法创建可执行文件`. (3认同)
  • 这个答案是不完整的,这就是为什么有时你可以得到"编译器无法创建可执行文件"的错误.在同一个帖子中查看我的答案 (2认同)

vol*_*ato 47

杰克的回答是不完整的.

您需要编译器/ libc支持32位编译.在像Ubuntu这样的发行版中,您需要做的是安装包gcc-multilib和/或g++-multilib:

sudo apt-get install gcc-multilib g++-multilib
Run Code Online (Sandbox Code Playgroud)

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

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
Run Code Online (Sandbox Code Playgroud)

如果您没有安装multilib,则会configure: error: C compiler cannot create executables在传递-m32标志时收到错误消息.

  • 默认情况下,某些程序在amd64上编译32位(例如wine,)可能除了64位之外还应该能够找到multilib(如果已安装).OP似乎不是这样.此外,杰克对一件事是正确的 - 它应该是`--build`,而不是`--host`.当且仅当您构建编译器时,才应使用`--host`.它仍然有效,因为有很多人不使用RTFM并编写使用`--host`而不是`--build`的脚本,而autotools人已经打破了足够的东西. (3认同)

Mal*_*ous 7

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

./configure CC="gcc -m32" CXX="g++ -m32"
Run Code Online (Sandbox Code Playgroud)

当然,您仍然需要应用程序使用的所有库的32位版本,因此有关缺少库的任何错误都指的是32位版本.