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

Jur*_*873 61 linux gcc 32-bit x86-64

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

当我启动设置它可以正常工作,但在它尝试更新自己并编译一些模块后,它无法加载它们.

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

是否有任何方法(一些环境变量或类似的东西)迫使gcc为32位平台做所有事情.32位chroot会工作吗?

Ala*_*rce 70

你需要让GCC使用这个-m32标志.

您可以尝试编写一个简单的shell脚本$PATH并将其命名为gcc(确保您不会覆盖原始gcc,并确保新脚本更早出现$PATH,并且它使用GCC的完整路径.

我认为你需要的代码就像/bin/gcc -m32 $*取决于你的shell一样($*包括所有参数,尽管它可能是其他东西 - 非常重要!)

  • 在某些情况下,您还需要32位C库以及程序链接的任何外部库的32位版本. (14认同)
  • 确实.标准库:C:`apt-get install gcc-multilib`; C++:`apt-get install g ++ - multilib`. (5认同)

Geo*_* R. 44

您可以通过应用Alan Pearce的方法获得32位二进制文​​件,但您也可能会收到如下错误:

fatal error: bits/predefs.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,如果你有apt-get,只需安装gcc-multilib

sudo apt-get install gcc-multilib 
Run Code Online (Sandbox Code Playgroud)

  • 对于 C++ 项目,`sudo apt-get install gcc-multilib g++-multilib`。 (2认同)

e27*_*314 9

对于您直接编译使用任何代码gcc/ g++,你将需要添加-m32选项编译命令行,只需编辑CFLAGS,CXXFLAGSLDFLAGS在您的变量Makefile.

对于您可能正在使用的任何第三方代码,您必须确保在构建它时将其配置为交叉编译.运行./configure --help并查看可用的选项.在大多数情况下,你可以提供你的CFLAGS,CXXFLAGSLDFLAGS变量的配置脚本.您可能还需要添加--build,并--host以配置脚本,所以你最终的东西像

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu
Run Code Online (Sandbox Code Playgroud)

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