64位Ubuntu上编译32位程序

傷城~ 2022-03-08 09:36 1009阅读 0赞

1.确认主机为64位架构的内核,应该输出为adm64,执行:

  1. $ dpkg --print-architecture
  2. 1

这里写图片描述

2.确认打开了多支架功能,应该输出为i386,执行:

  1. $ dpkg --print-foreign-architectures
  2. 1

这里写图片描述

如果没有,则需要手动打开,依次执行:

  1. $ sudo dpkg --add-architecture i386
  2. $ sudo apt-get update
  3. $ sudo apt-get dist-upgrade
  4. 1
  5. 2
  6. 3

3.安装 gcc multilab, 执行:

  1. sudo apt-get install gcc-multilib g++-multilib
  2. 1

4.注意:用GCC编译时需要加上 -m32,选项

因为一般情况下在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序。

现在我们来测试一下:

  1. /*************************************************************************
  2. > File Name: hello.c
  3. > Author:
  4. > Mail:
  5. > Created Time: 2016年12月01日 星期四 13:06:20
  6. ************************************************************************/
  7. #include<stdio.h>
  8. int main()
  9. {
  10. printf("hello world!\n");
  11. return 0;
  12. }
  13. 1
  14. 2
  15. 3
  16. 4
  17. 5
  18. 6
  19. 7
  20. 8
  21. 9
  22. 10
  23. 11
  24. 12
  25. 13
  26. 14

我们编译一下,首先编译成正常的64位的系统:

  1. gcc -g hello.c -o hello
  2. 1

把某个程序编译成32位的系统:

  1. gcc -m32 hello.c
  2. 1

因为没有指定特定的可执行文件的名字,所以生成的文件名叫做a.out


我们来看看我们编译之后的结果:
这里写图片描述

这里写图片描述

我们可以发现a.out文件已经成为了32位的可执行文件,hello被编译成为了64位文件。


Reference:
[1]http://blog.csdn.net/xsckernel/article/details/38045783
[2]http://blog.csdn.net/fengbingchun/article/details/50924311

[3] https://blog.csdn.net/chichoxian/article/details/53471591

发表评论

表情:
评论列表 (有 0 条评论,1009人围观)

还没有评论,来说两句吧...

相关阅读