强制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
编辑CFLAGS
, CXXFLAGS
和LDFLAGS
variables即可。
对于您可能正在使用的任何第三方代码,您必须确保何时构build它以进行交叉编译。 运行./configure --help
并查看哪个选项可用。 在大多数情况下,您可以将CFLAGS
, CXXFLAGS
和LDFLAGS
variables提供给configuration脚本。 你也可能需要添加--build
和 – --host
的configuration脚本,所以你最终得到类似的东西
./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu
如果编译失败,这可能意味着你需要在你的64位机器上安装一些32位的开发包