强制gcc在64位平台上编译32位程序
我有一个专用程序,我试图在64位系统上使用。强制gcc在64位平台上编译32位程序
当我启动安装程序时,它工作正常,但在它尝试更新自身并编译一些模块并且未能加载它们之后。
我怀疑它是因为它使用gcc和gcc试图编译他们为64位系统,因此这个程序不能使用这些模块。
有什么办法(一些环境变量或类似的东西)强制gcc做一切为32位平台。 32位chroot会工作吗?
您需要让GCC使用-m32
标志。
您可以尝试编写一个简单的shell脚本到您的$PATH
并称之为gcc(确保您不覆盖原始gcc,并确保新脚本早于$PATH
,并且它使用完整路径。GCC
我想你需要的代码只是取决于你的shell像/bin/gcc -m32 $*
(该$*
有没有包括所有的论据,虽然这可能是别的东西 - 非常重要)
你还需要32位C库,以及在某些情况下程序链接的任何外部库的32位版本。 – 2010-08-17 11:12:54
确实。标准库:C:'apt-get install gcc-multilib'; C++:'apt-get install g ++ - multilib'。 – Bart 2014-11-20 17:13:37
你可能会得到一个32位二进制通过应用Alan Pearce的方法,但您也可能会收到如下错误:
fatal error: bits/predefs.h: No such file or directory
如果是这样的话,如果你有apt-get的,只是安装gcc-multilib的
sudo apt-get install gcc-multilib
对于C++项目,'sudo apt-get install gcc-multilib g ++ - multilib'。 – phoenix 2017-09-19 16:28:41
对于您直接编译使用gcc
/g++
任何代码,你将需要添加-m32
选项到编译命令行,只需编辑您的Makefile
中的CFLAGS
,CXXFLAGS
和LDFLAGS
变量即可。
对于您可能正在使用的任何第三方代码,您必须确保何时构建它以将其配置为进行交叉编译。运行./configure --help
并查看哪个选项可用。在大多数情况下,您可以将CFLAGS
,CXXFLAGS
和LDFLAGS
变量提供给配置脚本。您可能还需要添加--build
和--host
的配置脚本,所以你最终的东西像
./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu
如果编译失败这可能意味着你需要你的64位计算机上安装一些32位应用程序开发包
尝试发布到*。你可能会得到一个很好的回应 – 2010-08-17 10:25:27
问题是安装程序,而不是写它@Nathan – 2010-08-17 10:47:23
可能的重复[如何在64位Linux机器上用gcc/cmake编译32位二进制文件](http ://*.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) – 2015-03-18 05:15:44