如何在64位Ubuntu上编译32位应用程序?

前端之家收集整理的这篇文章主要介绍了如何在64位Ubuntu上编译32位应用程序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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等交叉编译器发生冲突

猜你在找的Ubuntu相关文章