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


70

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

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

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

是否有任何方法(一些环境变量或类似的东西)强制gcc为32位平台执行所有操作。32位chroot可以工作吗?


尝试发布到stackoverflow。您可能会在那得到很好的回应
Nathan Fellman 2010年

问题在于安装程序,而不是编写程序@Nathan
Ivo Flipse

Answers:


77

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

您可以尝试向自己的脚本编写一个简单的shell脚本,$PATH并将其命名为gcc(确保您不覆盖原始gcc,并确保新脚本早于出现$PATH,并且使用了指向GCC的完整路径。

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


15
在某些情况下,您还需要32位C库以及程序所链接的任何外部库的32位版本。
Tim Post

7
确实。标准库:C apt-get install gcc-multilib:; C ++ :apt-get install g++-multilib
巴特2014年

46

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

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


对于C ++项目,请参见sudo apt-get install gcc-multilib g++-multilib
凤凰城

9

对于您直接编译使用任何代码gcc/ g++,你将需要添加-m32选项编译命令行,只需编辑CFLAGSCXXFLAGSLDFLAGS在您的变量Makefile

对于您可能正在使用的任何第三方代码,必须确保在构建时将其配置为进行交叉编译。运行./configure --help并查看哪个选项可用。在大多数情况下,你可以提供你的CFLAGSCXXFLAGSLDFLAGS变量的配置脚本。您可能还需要向配置脚本添加--build--host,因此最终会出现类似

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.