我有一个专有程序,试图在64位系统上使用。
当我启动安装程序时,它工作正常,但是在尝试更新自身并编译某些模块后,它无法加载它们。
我怀疑这是因为它正在使用gcc,而gcc试图将它们编译为64位系统,因此该程序无法使用这些模块。
是否有任何方法(一些环境变量或类似的东西)强制gcc为32位平台执行所有操作。32位chroot可以工作吗?
我有一个专有程序,试图在64位系统上使用。
当我启动安装程序时,它工作正常,但是在尝试更新自身并编译某些模块后,它无法加载它们。
我怀疑这是因为它正在使用gcc,而gcc试图将它们编译为64位系统,因此该程序无法使用这些模块。
是否有任何方法(一些环境变量或类似的东西)强制gcc为32位平台执行所有操作。32位chroot可以工作吗?
Answers:
您需要使GCC使用 -m32
标志。
您可以尝试向自己的脚本编写一个简单的shell脚本,$PATH
并将其命名为gcc(确保您不覆盖原始gcc,并确保新脚本早于出现$PATH
,并且使用了指向GCC的完整路径。
我认为您需要的代码就像是/bin/gcc -m32 $*
取决于您的shell一样(在$*
那里可以包含所有参数,尽管可能还有其他东西-非常重要!)
apt-get install gcc-multilib
:; C ++ :apt-get install g++-multilib
。
对于您直接编译使用任何代码gcc
/ g++
,你将需要添加-m32
选项编译命令行,只需编辑CFLAGS
,CXXFLAGS
并LDFLAGS
在您的变量Makefile
。
对于您可能正在使用的任何第三方代码,必须确保在构建时将其配置为进行交叉编译。运行./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位开发包