如何在64位Linux机器上编译32位二进制文​​件而不触及CFLAGS环境变量

时间:2009-11-04 12:06:41

标签: linux gcc 64-bit compilation freebsd

中的解决方案

How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake

是不可能的,因为我使用第三方软件和已经使用CFLAGS变量的其他东西。不允许修补他们的文件 - 我的老板说。

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

2 个答案:

答案 0 :(得分:15)

您不能在您的环境中更改CFLAGS,但有什么理由不能暂时覆盖它以进行构建吗?

对于基于autotool的软件包,我首先尝试:

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

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

<强>更新

那么,假设你不能重新定义你的CC变量,我会玩一些路径技巧。使用以下(未经测试的)<{1}}在名为${HOME}/gcc32的{​​{1}}中创建一个shell脚本:

gcc

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

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

明显的修改将支持export PATH=${HOME}/gcc32:${PATH} g++或任何其他编译器。

答案 1 :(得分: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调用编译器时(假设它们使用相对路径),则会调用脚本。