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

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

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

我怀疑这是因为它使用gcc和gcc试图编译他们的64位系统,因此这个程序不能使用这些模块。

有什么办法(一些环境variables或类似的东西)强制gcc做一切的一个32位平台。 一个32位的chroot会工作吗?

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

你可以尝试写一个简单的shell脚本到你的$PATH并把它叫做gcc(确保你不覆盖原来的gcc,并确保新的脚本早于$PATH ,并且它使用GCC的完整path。

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

您可以通过应用Alan Pearce的方法来获得一个32位的二进制文件,但是您也可能会遇到以下错误:

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

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

 sudo apt-get install gcc-multilib 

对于使用gcc / g++直接编译的任何代码,您需要在编译命令行中添加-m32选项,只需在Makefile编辑CFLAGSCXXFLAGSLDFLAGSvariables即可。

对于您可能正在使用的任何第三方代码,您必须确保何时构build它以进行交叉编译。 运行./configure --help并查看哪个选项可用。 在大多数情况下,您可以将CFLAGSCXXFLAGSLDFLAGSvariables提供给configuration脚本。 你也可能需要添加--build和 – --host的configuration脚本,所以你最终得到类似的东西

 ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu 

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