中的解决方案
How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake
是不可能的,因为我使用第三方软件和已经使用CFLAGS变量的其他东西。不允许修补他们的文件 - 我的老板说。
所以我必须找到另一种方法来强制执行它。也许有一些神奇的符号链接将调用gcc重定向到32位版本的编译器(希望不动态检测默认目标)。
答案 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调用编译器时(假设它们使用相对路径),则会调用脚本。