64位Linux上编译32位软件
来源:互联网 发布:ubuntu 安装 交换分区 编辑:程序博客网 时间:2024/04/30 21:42
问题:我的软件是运行在32位环境下的,原来也是在CentOS 6.3 32位上编译,运行都是没有问题的;
最近CentOS 7出来了,但是只有x86_64的,我的任务就是将我的软件移植到64位的CentOS 7上,能够编译成功,且能够运行。
64位系统是兼容32位软件的,所以只要能够编译成功,那么运行将不是问题。
如果只是想编译个hello world,这个任务很简单,下载glibc.i686,glibc-devel.i686,libgcc.i686,
gcc -m32 a.c,就搞定了。但是我的软件非常庞大,依赖于很多第三方的库,有的是rpm包,有的是源码包,所以编译的过程中遇到了很多问题。
第一步:准备环境
安装兼容库和开发工具
如果"Compatibility Libraries"和"Development Tools"没有安装,就先装上
yum grouplist 命令会列出所有安装的和没有安装的可用的安装包。
yum groupinstall "Compatibility Libraries"
yum groupinstall "Development Tools"
yum install glibc.i686 glibc-devel.i686 libgcc.i686
把上面的安装好后,先写个hello world试一下:
gcc -m32 a.c
如果编译、运行都没有问题,就可以编译我的软件了。
第二步:编译
运行顶层的build脚本时需要改成
setarch i386 --uname-2.6 ./build.sh
将平台设置成i386,并将内核版本设置成2.6。
这么做是因为大多数开源的源码包会根据平台来设置编译选项,设置成i386才有可能编译32的程序;
有些开源软件可能还不支持大于3.0的内核,所以内核版本也得修改。如果都支持的话,这个就没有必要修改啦。
然后开始编译,编译时遇到很多问题,如下。
问题1:编译mutt开源软件时,出错:
checking for waddnwstr in -lncurses... no
checking for waddnwstr in -lncursesw... no
checking for initscr in -lncurses... no
checking for initscr... (cached) no
checking for tgoto... no
checking for tgoto in -ltermcap... no
checking for tgoto in -ltermlib... no
checking for tgoto in -lunknown... no
checking for initscr in -lcursesX... no
checking for initscr in -lcurses... no
checking for initscr in -lncurses... (cached) no
checking for initscr in -lxcurses... no
checking for initscr in -ljcurses... no
checking for initscr in -lunknown... no
configure: error: no curses library found
configure: error: ./configure failed for misc/mutt
make: *** [App] Error 255
显示找不到curses库,那就下载
yum install ncurses-devel.i686 ncurses-libs.i686
下载后问题还是存在,但是库文件明明已经存在,查看mutt目录下的config.log文件,发现编译测试程序时,编译选项只有-O2,没有-m32
在configure中所有的:
ac_link='$CC -o conftest$ac_exeext …
加上-m32
ac_link='$CC -m32 -oconftest$ac_exeext …
这是AC_CHECK_LIB的问题,编译测试程序时没有加-m32选项,链接64位的库找不到。- 64位Linux上编译32位软件
- 在64位linux上编译32位程序
- 32位linux操作系统上编译 64位应用程序
- 64位Linux 编译32位程序
- Linux 64位 编译32位程序
- 64位 Linux 编译32位应用程序
- 64位 Linux 编译32位应用程序
- linux 64位编译32位protobuf
- 64位 Linux 编译32位应用程序
- linux 64位编译32位protobuf
- 在64位Linux系统交叉编译32位软件:ffmpeg
- ubuntu 64位编译32位软件问题
- 在64位linux上编译32位程序 for i386 intel
- 怎么在64位linux机器上编译32位的openssl库
- 64 位 Arch Linux 系统上运行和编译 32 位程序。
- 64位Centos6.0上编译32位程序
- 64位机器上 编译32位程序
- HP 上编译的32位64位问题
- 字典树 详解
- 去掉ExpandableListView的箭头图标
- Android设置RadioButton在文字的右边
- LoadRunner设置检查点的几种方法介绍
- BUPT Summer Journey #test7 E
- 64位Linux上编译32位软件
- 清除浮动的方法
- poj 1656 Counting Black
- mantle相关,待研究
- android setTag (int key, Object tag)抛出IllegalArgumentException的问题
- 习近平名字在党媒出现次数稍逊毛泽东
- hdu 1079 Calendar Game 博弈(组合游戏) sg函数
- MRTG—网络监控工具
- 自己动手写CPU之第五阶段(1)——流水线数据相关问题