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

Posted

技术标签:

【中文标题】使用 automake 配置脚本在 64 位 Linux 上构建 32 位?【英文标题】:Build 32bit on 64 bit Linux using an automake configure script? 【发布时间】:2011-03-16 18:29:04 【问题描述】:

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

【问题讨论】:

加一。我正在尝试为 Solaris 构建 Git。 uname -m 返回i86pc。除了 10 个左右的依赖库中的一个之外,其他所有库都错误地检测到了该平台。只有 OpenSSL 正确地将其识别为 x86_64。 【参考方案1】:

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

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

【讨论】:

对我不起作用 :( 请通过 ***.com/questions/13780319/… 帮助我 尝试构建库时它对我不起作用。它给了我消息configure: error: C++ compiler cannot create executables 此答案不完整,这就是为什么有时您会收到“编译器无法创建可执行文件”错误的原因。在同一线程中查看我的答案【参考方案2】:

杰克的回答不完整。

您需要编译器/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,在传递 -m32 标志时会收到类似 configure: error: C compiler cannot create executables 的错误。

【讨论】:

有些程序默认在 amd64 上编译 32 位(例如 wine),可能除了 64 位之外,如果安装了 multilib,应该能够找到。 OP似乎并非如此。此外,杰克在一件事上是对的——应该是--build,而不是--host。当且仅当您正在构建编译器时,才应使用--host。它仍然有效,因为有很多人不使用 RTFM 并编写使用 --host 而不是 --build 的脚本,而且 autotools 人已经破坏了足够多的东西。 Debian stable 中不再存在 *-multilib 包。 我仍然在 Debian Stretch 中看到 g++-multilib。除此之外,您还需要启用 32 位运行时库,如 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 @JonathanBaldwin ./configure --help 说(对于 autoconf 生成的脚本):System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD]【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

假设 gcc/g++:

CPPFLAGS=-m32 ./configure ...

【讨论】:

感谢您的回答。配置脚本仍然将构建系统类型和主机系统类型设置为 x86_64-unknown-linux-gnu。你知道如何覆盖这些吗?【参考方案5】:

上述方法的另一种方法是(如果有的话)使用专用的 x86 编译器。然后配置行将是这样的(我以模式“-x86”命名x86-tools):

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

【讨论】:

以上是关于使用 automake 配置脚本在 64 位 Linux 上构建 32 位?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AM_INIT_AUTOMAKE 参数并配置脚本命令行参数

automake:如何设置链接器脚本的路径?

使用 automake 并通过工具链进行配置

Linux——Tomcat安装

sh 脚本只显示工具的版本,如果它们安装在系统中。 (clang make automake autoconf cmake)

使用 Automake 为 bin_SCRIPTS 中的每个文件应用一个命令