强制gcc在64位平台上编译32位程序

时间:2010-08-17 08:45:36

标签: linux gcc 32-bit x86-64

我有一个专有程序,我试图在64位系统上使用。

当我启动设置时,它工作正常,但在尝试更新自身并编译某些模块后,无法加载它们。

我怀疑它是因为它正在使用gcc和gcc尝试为64位系统编译它们,因此该程序无法使用这些模块。

是否有任何方法(一些环境变量或类似的东西)迫使gcc为32位平台做所有事情。 32位chroot会工作吗?

3 个答案:

答案 0 :(得分:70)

您需要让GCC使用-m32标志。

您可以尝试将简单的shell脚本编写到$PATH并将其命名为gcc(确保不覆盖原始gcc,并确保新脚本在$PATH中更早出现,并且它使用GCC的完整路径。

我认为你需要的代码就像/bin/gcc -m32 $*一样,取决于你的shell($*包含所有参数,尽管它可能是其他东西 - 非常重要!)

答案 1 :(得分:44)

您可以通过应用Alan Pearce的方法获得32位二进制文​​件,但您也可能会收到如下错误:

fatal error: bits/predefs.h: No such file or directory

如果是这种情况,并且你有apt-get,只需安装gcc-multilib

即可
sudo apt-get install gcc-multilib 

答案 2 :(得分:9)

对于使用gcc / g++直接编译的任何代码,您需要在编译命令行中添加-m32选项,只需编辑CFLAGS,{您CXXFLAGS中的{1}}和LDFLAGS个变量。

对于您可能正在使用的任何第三方代码,您必须确保在构建它时将其配置为交叉编译。运行Makefile并查看可用的选项。在大多数情况下,您可以将./configure --helpCFLAGSCXXFLAGS变量提供给配置脚本。您还可能需要将LDFLAGS--build添加到配置脚本中,以便最终得到类似

的内容
--host

如果编译失败,这可能意味着您需要在64位计算机上安装一些32位开发包

相关问题