GCC - 在 64 位系统上编译 32 位代码

GCC - 在 64 位系统上编译 32 位代码

我正在学习汇编语言,需要将一段 C 代码编译成 32 位可执行文件。问题是我一直收到此错误。我尝试安装 gcc-multilib 和 g++-lib,但没有帮助。有人知道可能发生了什么吗?

> gcc main.s -m32 -o main

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

在 Ubuntu 16.10 上使用 gcc 版本 4.8.5(Ubuntu 4.8.5-4ubuntu4)。

更新:添加了编译命令。我事先编译了 .s 文件,gcc -m32 -S main.c因为我需要查看汇编代码。

答案1

gcc-multilib软件包仅为当前默认编译器提供 32 位支持。

由于您使用的是非默认编译器(gcc-4.8与系统默认编译器相对gcc-6),因此需要明确安装特定于底层版本的多库包,例如

sudo apt install gcc-4.8-multilib

(或者您最喜欢的包管理器中的等效包)。

相关内容