64位linux下的GCC如何编译出一个32位可执行程序?

64位linux下的GCC如何编译出一个32位可执行程序?,第1张

理论上安装支持环境,之后64位的gcc编译成32位程序,就加-m32参数即可。

当然还一个办法是装个32位的gcc。

另外,交叉编译也适用于x86架构。

不过这么编译经常会出现各种问题,所以编译32位的程序,最好还是用32位系统。

不一定重装,用chroot和setarch命令配合即可弄出一个32位的子系统。

一般64位系统最好不要安装32位库的-dev,经常有冲突,强行安装会破坏64位环境,头文件并不像共享库分得那么完美。

我觉得比较好的做法是,重新把某一个文件夹当成rootfs,在里面安装各种32位的库和库-dev,然后给gcc传递参数"--sysroot=路径"就可以让gcc重新选取那个文件夹为rootfs,而不再认为/为rootfs。

常规做法,先添加32bit架构:

sudo dpkg --add-architecture i386

sudo apt-get update

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

然后,你再安装或者直接运行你的32位程序。

编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。

编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译,会出现下面的错误

In file included from /usr/include/features.h:378,

from /usr/include/assert.h:37,

from ../../../include/tinyxml/tinystr.h:42,

from ../../../src/tinyxml/tinystr.cpp:32:

/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录

这时候需要安装 gcc所有支持文件 sudo apt-get install gcc-multilib

将会安装下列额外的软件包:

cpp-4.4 g++-4.4 gcc-4.4 gcc-4.4-base gcc-4.4-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64 libgcc1 libgomp1

libstdc++6 libstdc++6-4.4-dev

建议安装的软件包:

gcc-4.4-locales g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg libmudflap0-4.4-dev libgcc1-dbg libgomp1-dbg libmudflap0-dbg

libcloog-ppl0 libppl-c2 libppl7 lib64mudflap0 libstdc++6-4.4-doc

下列【新】软件包将被安装:

gcc-4.4-multilib gcc-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64

下列软件包将被升级:

1. 编译连接成 32 位的 windows xp 32位系统下可运行的程序;

2. 编译连接成 64 位的 windows vista 64位系统下可运行的程序;

3. 编译连接成 32 位的 ubuntu 32位系统下可运行的程序;

4. 编译连接成 64 位的 ubuntu 64位系统下可运行的程序。

老师出的题,不太懂怎么实现


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7473602.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存