免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 35465 | 回复: 11
打印 上一主题 下一主题

64位linux下面的GCC如何编译出一个32位可执行程序? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-28 10:22 |只看该作者 |倒序浏览
windows64位服务器上面安装VS,可以编译32位/64位的代码。

那么在64位的linux上面:
(1)可以编译出32位代码么?
(2)可以运行32位程序么?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2012-03-28 10:31 |只看该作者
donet8 发表于 2012-03-28 10:22
那么在64位的linux上面:
(1)可以编译出32位代码么?

这个取决于你用的编译器,GCC 在许多体系结构上是可以做到这点的。

(2)可以运行32位程序么?

这个取决于你的内核在当前体系结构上是否支持这个(Linux 内核在一些体系结构上是支持这个的),同时可能还需要一些32位的动态库支持。

论坛徽章:
0
3 [报告]
发表于 2012-03-28 12:02 |只看该作者
MMMIX 发表于 2012-03-28 10:31
这个取决于你用的编译器,GCC 在许多体系结构上是可以做到这点的。


我在CentOS 6.2 的64位版本,x86的core2机器上面运行。
我想知道用gcc如何编译出一个最简单的32位应用程序并运行。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2012-03-28 12:18 |只看该作者
donet8 发表于 2012-03-28 12:02
我在CentOS 6.2 的64位版本,x86的core2机器上面运行。
我想知道用gcc如何编译出一个最简单的32位应用 ...


CentOS 不清楚,Debian 的话需要安装 gcc-multilib,libc6-dev-i386。然后用 gcc 编译的时候加 -m32 选项,运行的话不需要特殊处理,和通常程序一样直接执行就行了。

论坛徽章:
0
5 [报告]
发表于 2012-03-28 15:42 |只看该作者
MMMIX 发表于 2012-03-28 12:18
CentOS 不清楚,Debian 的话需要安装 gcc-multilib,libc6-dev-i386。然后用 gcc 编译的时候加 -m32 选 ...


也就是还要两个库gcc-multilib和libc6-dev-i386

我知道which命令可以看有哪些可执行程序已经安装了。
我如何知道我有没有gcc-multilib和libc6-dev-i386这两个库呢?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2012-03-28 15:59 |只看该作者
donet8 发表于 2012-03-28 15:42
也就是还要两个库gcc-multilib和libc6-dev-i386

这是 Debian 上的名字,CentOS 上肯定是不叫这个名字的。

你可以先用 gcc -m32 编译个 hello world 看看是不是缺什么东西,缺了就装。

论坛徽章:
0
7 [报告]
发表于 2012-03-29 10:25 |只看该作者
MMMIX 发表于 2012-03-28 12:18
CentOS 不清楚,Debian 的话需要安装 gcc-multilib,libc6-dev-i386。然后用 gcc 编译的时候加 -m32 选 ...


我发现CentOS_6.2_Final的dvd光盘第一张里面根本就没有这两个东西。第二张也没有。
崩溃。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2012-03-29 11:19 |只看该作者
donet8 发表于 2012-03-29 10:25
我发现CentOS_6.2_Final的dvd光盘第一张里面根本就没有这两个东西。第二张也没有。
崩溃。


怎么你看不懂中文么?

论坛徽章:
0
9 [报告]
发表于 2012-03-29 11:52 |只看该作者
MMMIX 发表于 2012-03-29 11:19
怎么你看不懂中文么?


大虾说的是?... ...

论坛徽章:
0
10 [报告]
发表于 2012-05-16 16:07 |只看该作者
X86_64 的 Redhat / Centos / Scientific 下面,若要编译、运行32位程序,需要安装以下包:
yum install libgcc.i686
yum install glibc-static.i686
yum install glibc-devel.i686
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP