Linux黑科技:怎样在64位Ubuntu编译出32位的可执行文件?

Linux TOMORROW 12个月前 (07-09) 502次浏览 2个评论 扫描二维码
关国源 Linux微知识 

 

在研究今天的问题之前,先给大家描述清楚 64 位系统与 32 位系统的的区别,其实很好分辨,32 位系统的数据宽度是 32 位,就是 CPU 在每次提取数据时,每次提取 32 位数据。而 64 位系统则每次提取 64 位数据。

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

    一般而言,64 位系统编译出来的程序就会是 64 位的,32 位系统编译出来的程序就是 32 位的。但是高位会兼容低位,如果 64 位系统可以兼容 32 位的程序。

 

1)我们先查看下当前 Ubuntu 系统的位数。输入命令:“getconf LONG_BIT”查询:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

当前我的系统是 64 位,正常来讲,编译出来的程序就应该是 64 位的,以上次的程序为例子,我们通过 gcc 编译器编译出来的 main 程序:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

2)我可以查看这个 main 可执行文件的位数是多少,通过输入命令:“file main”查看:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

如果看到“64-bit”“x86-64”等字样,则证明是这个可执行文件是 64 位的,这个结果在我们的意料之内。64 位系统编译出 64 位的程序。但是由于高位兼容低位的,64 位系统能不能编译出 32 位的可执行文件呢?

 

3)我们还需要看看这个 64 位系统的 Ubuntu 系统是否兼容支持多架构环境,输入命令:“dpkg –print-foreign-architectures”:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

如果出现“i386”,则证明系统支持 32 位架构。

 

4)如果兼容的,还需要安装支持 32 位编译程序的 gcc 库,在能连接外网的情况下,输入命令“sudo  apt-get  install  gcc-multilib”:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

5)以上次的例子为例,重新编译程序,编译出 32 位的程序,需添加参数:“-m32”指定生成的 32 位程序名字位main32”:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

6)查看 main32 的架构:“file main32”:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?

如果出现“32-bit”和“Intel 80386”,则证明该可执行程序是 32 位的。

 

7)64 位和 32 位的程序在 64 位系统中执行效果是一样的:

Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?


TOMORROW 星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Linux 黑科技:怎样在 64 位 Ubuntu 编译出 32 位的可执行文件?
喜欢 (0)
TOMORROW
关于作者:
一个从石头坑掉到泥坑里的攻城狮。
醉熏的小土豆发表我的评论  请填写正确的 个人信息
取消评论
表情 加粗 斜体 签到
(2)个小伙伴在吐槽
  1. 楼下是疯子。哈哈
    jxf2352019-05-05 21:13 回复 Windows 7 | 未知浏览器
  2. 文章不错非常喜欢,支持
    头条2019-05-01 21:49 回复 Windows 7 | Chrome 63.0.3239.132