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

$ dpkg --print-architecture

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

$ dpkg --print-foreign-architectures

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

$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get dist-upgrade

3.      安装gcc multilab,执行:

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

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

5.      以下是简单的测试代码:

add.hpp:

int  add(int a, int b);

add.cpp:

#include "add.hpp"int  add(int a, int b)
{return  (a+b);
}

main.cpp:

#include <iostream>
#include "add.hpp"int main()
{int a = 2, b = 3;int ret = 0;ret = add(a, b);std::cout<<a<<" + "<<b<<" = "<<ret<<std::endl;return 0;
}

run_x86.sh:

#! /bin/bashg++  -m32 -c  -Os -fPIC add.cpp
ar -r libadd_x86.a *.o
objdump -a libadd_x86.a
g++ -m32 -o test_x86_add main.cpp -L  ./ -ladd_x86
./test_x86_add

run_x64.sh:

#! /bin/bashg++ -c  -Os -fPIC add.cpp
ar -r libadd_x64.a *.o
objdump -a libadd_x64.a
g++ -o test_x64_add main.cpp -L  ./ -ladd_x64
./test_x64_add

执行run_x86.sh,结果如下图:

执行run_x64.sh结果如下图:

如果执行文件与库不一致,则会出错,如下图:

shell脚本中的objdump命令用来查看指定的静态库是32位还是64位的,如果是动态库,则可以用file命令。

64位Ubuntu上编译32位程序操作步骤相关推荐

  1. 64位Ubuntu上编译32位程序

    1.确认主机为64位架构的内核,应该输出为adm64,执行: $ dpkg --print-architecture 2.确认打开了多支架功能,应该输出为i386,执行: $ dpkg --print ...

  2. 在64位Ubuntu上编译32位程序常见错误

    问       题1: 找不到头文件 asm/errno.h 解决办法 : [/usr/lib/gcc$ ]sudo ln -s x86_64-linux-gnu/asm asm 问题2:找不到gcc ...

  3. 64位Ubuntu上 安装32位QQ

    64位Ubuntu上 安装32位QQ --------------------------------------------------------------------------------- ...

  4. 64位Linux上编译32位软件

    问题:我的软件是运行在32位环境下的,原来也是在CentOS 6.3 32位上编译,运行都是没有问题的: 最近CentOS 7出来了,但是只有x86_64的,我的任务就是将我的软件移植到64位的Cen ...

  5. linux 64 32 编译支持,在64位linux上编译32位程序 for i386 intel

    编辑中 # ld -V GNU ld version 2.15.92.0.2 20040927 Supported emulations: elf_x86_64 elf_i386 i386linux ...

  6. 在64位linux下编译32位程序

    一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序. 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM ...

  7. 64位系统上运行32位程序的内存限制

    64位系统上运行32位程序能否申请到8G内存? 收藏到手机    转发   评论 2010-01-20 10:56 申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来 ...

  8. 64位的GCC 编译32位程序

    64位的GCC 编译32位程序 编译32的程序,只需要加上-m32就可以了 gcc -m32 llong.c 但是提示下面的错误 /usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86 ...

  9. ubuntu g++编译32位应用

    is incompatible with i386:x86-64 output报错 gcc编译也会出现类似问题 /usr/bin/ld: warning: i386 architecture of i ...

最新文章

  1. Apache 的prefork MPM和worker MPM
  2. windows下expdp自动备份脚本
  3. Javascript入门视频教程
  4. 微信小程序-开心大转盘(圆盘指针)代码分析
  5. Java设计模式之代理模式(Proxy)
  6. 2013年4月27日星期六
  7. RabbitMQ延迟消费和重复消费
  8. c++【深度剖析shared_ptr】
  9. JS高级——Proxy、Reflect
  10. python做图像识别该学什么_Python实现图片识别加翻译【高薪必学】
  11. 利用ApiPost接口管理工具校验/测试API返回结果是否符合预期
  12. 自然语言处理 4.语义分析
  13. win10jdk环境变量配置
  14. 【Android工具】更新手机流媒体播放器,手机DLNA播放器OPlayer
  15. db2检查什么表被锁住了,如何解锁
  16. 淘宝手淘首页金字塔流量爬升法|运营狗
  17. 李白打酒加强版(dp)
  18. Firewalld ip伪装和端口转发
  19. Postman + Pre-resuestScript:预请求脚本发送POST请求
  20. VB--. 和 ! ?

热门文章

  1. 1.数字图像获取:1.4图像的数据结构与特征
  2. 机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义
  3. LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)
  4. 黑计算机学校给的处分,学校处分通告格式
  5. 数据库低端sql查询语句片段
  6. 两种方法动态加载外部原生JS文件
  7. slub object 内存布局
  8. Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)
  9. Linux进程管理: 多进程编程
  10. 贪心:remove K digits移除K个数字