我正在尝试使用gcc 4.8在Ubuntu Server 12.04 LTS 64位上编译32位C应用程序.我收到有关不兼容库和跳过-lgcc的链接器错误消息.如何编译和链接32位应用程序需要做什么?
Ubuntu 16.04
sudo apt-get install gcc-multilib
出于某种原因,在Ubuntu 17.04上,我还需要安装特定版本的一个:
sudo apt-get install gcc-6-multilib
然后是一个最小的hello世界:
#include <stdio.h> int main() { puts("Hello world!"); return 0; }
在没有警告的情况下编译:
gcc -m32 -pedantic-errors -std=c89 -Wall hello_world.c
和:
./a.out
给:你好世界!如预期的那样:
file a.out
说:
a.out: ELF 32-bit LSB executable,Intel 80386,version 1 (SYSV),dynamically linked (uses shared libs),for GNU/Linux 2.6.24,BuildID[sha1]=87c87a83878ce7e7d23b6236e4286bf1daf59033,not stripped
和:
qemu-i386 a.out
还给出了:Hello world!但是对于x86_64可执行文件会失败
此外,我有:
>在32位VM中运行已编译的文件
>编译并运行IA-32 C driver + complex IA-32 code
所以我认为它的工作原理:-)
另见:Cannot find crtn.o,linking 32 bit code on 64 bit system
遗憾的是,这个包与gcc-arm-linux-gnueabihf https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211等交叉编译器发生冲突