donet8 发表于 2012-03-28 10:22

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

windows64位服务器上面安装VS,可以编译32位/64位的代码。

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

MMMIX 发表于 2012-03-28 10:31

donet8 发表于 2012-03-28 10:22 static/image/common/back.gif
那么在64位的linux上面:
(1)可以编译出32位代码么?

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


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

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

donet8 发表于 2012-03-28 12:02

MMMIX 发表于 2012-03-28 10:31 static/image/common/back.gif
这个取决于你用的编译器,GCC 在许多体系结构上是可以做到这点的。




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

MMMIX 发表于 2012-03-28 12:18

donet8 发表于 2012-03-28 12:02 static/image/common/back.gif
我在CentOS 6.2 的64位版本,x86的core2机器上面运行。
我想知道用gcc如何编译出一个最简单的32位应用 ...

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

donet8 发表于 2012-03-28 15:42

MMMIX 发表于 2012-03-28 12:18 static/image/common/back.gif
CentOS 不清楚,Debian 的话需要安装 gcc-multilib,libc6-dev-i386。然后用 gcc 编译的时候加 -m32 选 ...

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

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

MMMIX 发表于 2012-03-28 15:59

donet8 发表于 2012-03-28 15:42 static/image/common/back.gif
也就是还要两个库gcc-multilib和libc6-dev-i386

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

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

donet8 发表于 2012-03-29 10:25

MMMIX 发表于 2012-03-28 12:18 static/image/common/back.gif
CentOS 不清楚,Debian 的话需要安装 gcc-multilib,libc6-dev-i386。然后用 gcc 编译的时候加 -m32 选 ...

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

MMMIX 发表于 2012-03-29 11:19

donet8 发表于 2012-03-29 10:25 static/image/common/back.gif
我发现CentOS_6.2_Final的dvd光盘第一张里面根本就没有这两个东西。第二张也没有。
崩溃。

怎么你看不懂中文么?

donet8 发表于 2012-03-29 11:52

MMMIX 发表于 2012-03-29 11:19 static/image/common/back.gif
怎么你看不懂中文么?

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

sendltd 发表于 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
页: [1] 2
查看完整版本: 64位linux下面的GCC如何编译出一个32位可执行程序?