64位Ubuntu上编译32位程序操作步骤

18 篇文章 2 订阅

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/bash

g++  -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/bash

g++ -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命令。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值