12

解决方案在

如何使用 gcc/cmake 在 64 位 linux 机器上编译 32 位二进制文​​件

不可能,因为我使用 3rd 方软件和其他已经使用 CFLAGS 变量的东西。并且不允许修补他们的 makefile - 我的老板说。

所以我必须找到另一种方法来执行它。也许有一些符号链接的魔法将对 gcc 的调用重定向到 32 位版本的编译器(希望不会动态检测到默认目标)。

4

2 回答 2

17

您不允许在您的环境中更改 CFLAGS,但是您是否有任何理由不能临时覆盖它以进行构建?

对于基于自动工具的包,我会首先尝试:

CFLAGS="-m32" ./configure [opts]
make
make install

一个编写良好的configure.ac文件应该尊重您的 CFLAGS 变量并附加到它,而不需要您修改包源。

更新

那么,假设你不能重新定义你的 CC 变量,我会玩一些路径技巧。使用以下内容(未经测试)制作${HOME}/gcc32一个shell 脚本:gcc

#!/bin/sh
/usr/bin/gcc -m32 "$@"

然后在您想要构建 32 位时将其添加到您的路径中:

export PATH=${HOME}/gcc32:${PATH}

明显的修改将支持g++,icc或任何其他编译器。

于 2009-11-04T12:30:20.260 回答
2

假设 gcc 和朋友位于“/usr/bin”。我们还假设您的路径中有一个名为“~/.local/bin”的文件夹。您可以在“~/.local/bin”中创建一个名为“gcc”的 bash 脚本,例如:

#!/bin/bash
/usr/bin/gcc -m32 $@

您可以类似地创建一个“g++”脚本,其内容如下:

#!/bin/bash
/usr/bin/g++ -m32 $@

基本上,根据需要继续为“c++”、“cc”、“as”、“ld”等执行此操作。使脚本可执行。确保“~/.local/bin”在“/usr/bin”之前的 PATH 环境变量中。如果是这种情况,那么当 makefile 调用编译器(假设它们使用相对路径)时,将调用您的脚本。

于 2009-11-04T15:27:17.440 回答