1) 工具安装: a) 首先必须安装以下基本编译工具: sudo apt-get install gcc build-essential linux-header-`uname -r` dkms b) 另外,为编译32bit程序,还需要安装以下软件包
2) 最关键的东西是需要告知gcc编译器编译的平台是 i386, 所以需要: a) 在configure前加上linux32 b) 在configure后加上"CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 注:linux32 命令主要用来设置一下主机环境,其实影响的就是configure命令中--build, --host和--target三个选项。linux32 命令使用前后区别:
3) 如果编译的程序是32位的,所需要的动态链接库也必须是32位的,可以重新编译得到,也可以直接用sudo apt-get install libXXX:i386命令安装到编译主机上,":i386"即表示32位版本的该库。例如:wxWidgets需要用到 libpng12-dev,若我们需要编译32位版本的wxWidgets,就需要安装32位版本的libpng12-dev,sudo apt-get install libpng12-dev:i386即可。 注:若用apt-get安装,那么64bit版本的lib可能会被remove,所以慎用! 4) 实例:在64位Ubuntu上编译32位wxWidgets库 linux32 ./configure "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" --prefix=/home/rrcao/data/bin/wxWidget/lnx --enable-monolithic --disable-gtk2 --without-gtk --with-x11 --disable-shared make
5) 注意和原来的共享库冲突,尽量不要编译到 /usr 目录下,否则影响其它64位的程序正常运作就得不尝失了. 6) 能不能100%编译成功? 不一定,如果 makefile 使用了64位的linker,例如ld等,去link你编译出来32位的so的话,那就会报告不兼容. Good luck!! 相关参考: |
|