![GCC - 在 64 位系统上编译 32 位代码](https://linux22.com/image/1147119/GCC%20-%20%E5%9C%A8%2064%20%E4%BD%8D%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%BC%96%E8%AF%91%2032%20%E4%BD%8D%E4%BB%A3%E7%A0%81.png)
我正在学习汇编语言,需要将一段 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
(或者您最喜欢的包管理器中的等效包)。