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
如果执行文件与库不一致,则会出错,如下图:
shell脚本中的objdump命令用来查看指定的静态库是32位还是64位的,如果是动态库,则可以用file命令。