我有一个专有程序,我试图在64位系统上使用。
当我启动设置时,它工作正常,但在尝试更新自身并编译某些模块后,无法加载它们。
我怀疑它是因为它正在使用gcc和gcc尝试为64位系统编译它们,因此该程序无法使用这些模块。
是否有任何方法(一些环境变量或类似的东西)迫使gcc为32位平台做所有事情。 32位chroot会工作吗?
答案 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 --help
,CFLAGS
和CXXFLAGS
变量提供给配置脚本。您还可能需要将LDFLAGS
和--build
添加到配置脚本中,以便最终得到类似
--host
如果编译失败,这可能意味着您需要在64位计算机上安装一些32位开发包