您的位置:首页 > 运维架构 > Linux

64位 Linux 编译32位应用程序

2015-04-08 11:41 288 查看
1. Redhat 系 Linux

以 Scientific Linux 6.2 为例:

Scientific Linux 与 Centos 都是 Redhat Linux 的民间再发行版。因为它们既有Redhat的稳定,又可以及时免费更新Bugfix,所以比较流行。其中Scientific Linux由费米实验室维护,公司内的编译服务器都安装此版本。

uname -r 结果是:2.6.32-220.17.1.e16.x86_64, 确认是64位环境。

先检查编译环境是否完备。确认下"Development tools", "Compatibility libraries" 这两个组件有没有安装:

Shell代码


$ yum grouplist "Development tools" "Compatibility libraries"

没装则装上:

Shell代码


$ yum groupinstall "Development tools"

$ yum groupinstall "Compatibility libraries"

另外还需要安装 glibc-devel 的32位版

Shell代码


$ yum install glibc-devel.i686

下面写段代码测试下:

C代码


/* test.c */

#include <stdio.h>

int main()

{

printf("sizeof long is %d\n", sizeof(long));

return 0;

}

64位编译执行结果:

Shell代码


$ gcc test.c

$ file a.out

a.out: ELF 64-bit LSB executable ...

$ ./a.out

sizeof long is 8

32位编译执行结果 (在64位系统编译32位程序需要给 GCC 加 -m32 参数):

Shell代码


$ gcc -m32 test.c

$ file a.out

a.out: ELF 32-bit LSB executable ...

$ ./a.out

sizeof long is 4

2. Debian 系 Linux

以 ubuntu 12.04 为例:

uname -p 结果:x86-64, 确认是64位环境。

ubuntu 中需要安装以下包:

Shell代码


$ apt-get install build-essential module-assistant

$ apt-get install gcc-multilib g++-multilib

测试过程同上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: