分享

在64位的环境下编译32位的应用程序

 caorr1980 2014-04-09


1) 工具安装:

    a) 首先必须安装以下基本编译工具:

     sudo apt-get install gcc build-essential linux-header-`uname -r` dkms

    b) 另外,为编译32bit程序,还需要安装以下软件包

     sudo apt-get install ia32-libs libc6-dev-i386 linux32


2) 最关键的东西是需要告知gcc编译器编译的平台是 i386, 所以需要:

    a) 在configure前加上linux32

    b) 在configure后加上"CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"

    注:linux32 命令主要用来设置一下主机环境,其实影响的就是configure命令中--build, --host和--target三个选项。linux32 命令使用前后区别:

           staff-1:~/src/lame-3.96.1# ./configure
           checking build system type... x86_64-unknown-linux-gnu
           checking host system type... x86_64-unknown-linux-gnu

           staff-1:~/src/lame-3.96.1# linux32 ./configure
           checking build system type... i686-pc-linux-gnu
           checking host system type... i686-pc-linux-gnu


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

make install


5) 注意和原来的共享库冲突,尽量不要编译到 /usr 目录下,否则影响其它64位的程序正常运作就得不尝失了.


6) 能不能100%编译成功? 不一定,如果 makefile 使用了64位的linker,例如ld等,去link你编译出来32位的so的话,那就会报告不兼容. Good luck!!

相关参考:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多