一直都在x64服务器上开发和部署, 偶尔遇到了几台x86服务器, 花了一天的时间去编译出各种x86版本的库, 在网上搜了下大多数回复都很简单, 但是实际上对于一个引用库比较多的程序就麻烦多了, 这里记录下我的过程, 用的是gcc.
- 首先, 程序的编译要加
-m32
选项, 具体怎么加, 加在哪里根据项目自身而定.要注意的是, 不仅CXXFLAGS (or CFLAGS)要加, 最主要的是链接选项也要有,否则g++ –WL
之类的链接命令在没有-m32
下会对找到的32位Lib提示:”Skip incompatible file type ….”.
我用的是CMAKE, 因此要在下面的环境变量里加上该选项:
1 | SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -O0 -m32") |
- 上一步仅仅是设定了自己程序的编译选项, 这么一来, 所有要求引用的库都要求用ELF 32版本, 很简单file命令就可以查看库的版本:
1 | [root@localhost ~]# file /usr/lib/libboost_system.so.1.55.0 |
对于C/C++的标准库而言很简单,安装对应的包即可, 我的是CentOS6.x,对应下面:
1 | yum install glibc-devel.i686 |
对于其它库也可以用相同的方法, 例如下载安装mysql-libs.x86_64对应的mysql-libs.i686即可解决libmysqlclient.so之类的库引用问题.
但是对于不存在于包管理内的第三方库就没那么幸运了, 对于Boost C++ library 和POCO C++ library ,可以分别参照即将发的两篇文章.