我有一个专有程序,试图在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位开发包