Linux 强制gcc在64位平台上编译32位程序

Linux 强制gcc在64位平台上编译32位程序,linux,gcc,32-bit,x86-64,Linux,Gcc,32 Bit,X86 64,我有一个专用程序,我正试图在64位系统上使用 当我启动安装程序时,它工作正常,但在它尝试更新自身并编译一些模块后,它无法加载它们 我怀疑这是因为它使用gcc,gcc试图为64位系统编译它们,因此该程序不能使用这些模块 有没有办法(一些环境变量或类似的东西)迫使gcc为32位平台做所有事情。32位chroot可以工作吗?您需要让GCC使用-m32标志 您可以尝试在$PATH中编写一个简单的shell脚本,并将其称为gcc(确保您没有覆盖原始gcc,并且确保新脚本在$PATH中出现较早,并且它使用到

我有一个专用程序,我正试图在64位系统上使用

当我启动安装程序时,它工作正常,但在它尝试更新自身并编译一些模块后,它无法加载它们

我怀疑这是因为它使用gcc,gcc试图为64位系统编译它们,因此该程序不能使用这些模块


有没有办法(一些环境变量或类似的东西)迫使gcc为32位平台做所有事情。32位chroot可以工作吗?

您需要让GCC使用
-m32
标志

您可以尝试在
$PATH
中编写一个简单的shell脚本,并将其称为gcc(确保您没有覆盖原始gcc,并且确保新脚本在
$PATH
中出现较早,并且它使用到gcc的完整路径


我认为您需要的代码类似于
/bin/gcc-m32$*
,这取决于您的shell(该
$*
包含所有参数,尽管它可能是其他一些非常重要的参数!)

应用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
cxflags
LDFLAGS
变量即可

对于您可能使用的任何第三方代码,您必须确保在构建时将其配置为交叉编译。运行
/configure--help
,查看哪个选项可用。在大多数情况下,您可以向配置脚本提供
CFLAGS
cxflags
LDFLAGS
变量。您也可能需要d将
--build
--host
添加到配置脚本中,这样您就可以得到

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu

如果编译失败,这可能意味着您需要在64位计算机上安装一些32位开发包

尝试发布到stackoverflow。您可能会得到很好的响应。问题在于安装程序,而不是编写它@n可能与32位C库重复。您还需要32位C库以及32位版本NS无论是哪个程序库,在某些情况下都是程序链接的。标准库:C:<代码>安装GCC多LIB < /C>;C++ >代码APT获得安装G++ + MulleIB < /代码>。对于C++项目,<代码> SUDO APT获得安装GCC MulleLIB G++ + MuliLab。