Ice-2.1.2在RHEL Server 5.5上的安装

     因为项目的需要,服务器上的程序需要使用Ice接口与其它程序通信,对方提供了一个Windows版的工程,我要把它移植到Linux服务器上,既然Ice是跨平台跨语言的中间件,想来移植不是很困难,重新建一个工程编译一下就可以了,没想到,这期间竟是千辛万苦,苦不堪言啊,整整花了3天时间才搞定,这里记录下来,以免有类似情况的兄弟吃二茬苦,遭二遍罪。
     首先到Ice的官网(http://www.zeroc.com/),发现2.1.2版本的只提供32位的rpm包:ice-2.1.2-1.i386.rpm。下载下来,安装了一下,说少依赖文件:
        libcrypto.so.4 is needed by ice-2.1.2-1.i386
        libdb_cxx-4.2.so is needed by ice-2.1.2-1.i386
        libreadline.so.4 is needed by ice-2.1.2-1.i386
        libssl.so.4 is needed by ice-2.1.2-1.i386
     到http://rpm.pbone.net/上查找,运气还不错,找到了db4-4.2.52-6.i386.rpm、openssl097a-0.9.7a-9.el5_4.2.i386.rpm、readline-4.3-5.i386.rpm。都安装上以后,ice-2.1.2-1.i386.rpm就能安装了,有些包在安装中,会提示和高版本的冲突,可以使用强制安装指令,如:
         rpm -ivh --force openssl097a-0.9.7a-9.el5_4.2.i386.rpm
卸载使用 rpm -e openssl097a-0.9.7a-9.el5_4.2.i386
查询软件包安装的内容和位置使用 rpm -ql openssl097a-0.9.7a-9.el5_4.2.i386
注意后两条指令是没有.rpm后缀的。
     安装完ice-2.1.2-1.i386.rpm再安装ice-c++-devel-2.1.2-1.i386.rpm。默认安装到/usr/bin和/usr/lib。
     然后把Windows下的工程改成Linux下的工程,主要就是写一个Makefile文件。一开始Makefile文件写的有问题,导致报了一大堆错误。
     在Makefile文件中加入-lIce、-lIceUtil等信息后,在链接时会报 如下错误:
skipping incompatible/usr/lib/libIce .so  when searching for -lIce
/usr/bin/ld: cannot find  -lIce
     到度娘上一查,说是64位的系统不兼容32位的动态链接库。
     想了两个办法,一是使用高版本Ice,2.1.2以上的版本官网上都提供了64位的rpm包,试了最新的版本3.4.2,编译时报一堆莫名其妙的错误,又试了与2.1.2版最接近的3.0.1,同样一堆错误,看来高版本Ice不兼容2.1.2版Ice生成的.cpp文件。此方法作废。
     第二个方法是在链接时加入-m32 -march=i386 -mtune=i386选项,指定生成32平台的目标文件,这个办法很奏效,编译成功。但这个胜利是短暂的,和其它代码合并的时候就出现了问题,因为其它代码使用的动态库是64位,你不能在同一个工程里同时使用-m32 -m64选项。所以这个方法也作废。
     在一顿疯狂搜索后,发现根本找不到ice-2.1.2-1.x86_64.rpm包,没办法,只能采用最后一个办法了,编译源码。
     从官网下载Ice-2.1.2.tar.gz源码包,解压缩。这里先说一下,源码包里的README和INSTALL文件是相当重要的,在安装前一定要读,能少走很多弯路啊。
     一开始,直接编译,报了一堆错误,看了INSTALL.LINUX,说是gcc版本最好是3.2, 3.3 or 3.4,而RHEL 5.5的gcc是4.1.2,估计是版本不兼容。下了一个gcc-3.3,用gcc-4.1.2编译报错,网上一查说是gcc-3.3有bug,换高版本的3.3.6就没有问题。换了3.3.6,果然装上了。然后按照INSTALL.LINUX上说的老老实实的安装ThirdParty-Sources-2.1.2.tar.gz中的软件包。
     在安装ThirdParty-Sources-2.1.2中的db-4.2.52是又出现了问题,怎么也装不上,后头再看INSTALL.LINUX,发现上面说Berkeley DB 4.2.52 or 4.3.27都可以,赶紧去下4.3.27,但是到官网上一看,没有4.3.27,只有4.3.29,这是闹哪样啊,没办法只能下4.3.29,还好这个顺利装上。
     在安装途中,发现gcc-3.3.6也不能成功编译Ice,改成了gcc-3.4.6
     最后修改Ice的config/Make.rules,make,make install。
     然后祈祷,在佛祖的保佑下,Ice-2.1.2终于装上了。
     上面说的比较啰嗦,下面整理一下安装步骤。
     1. 首先安装gcc-3.4.6。
         #tar xjvf gcc-3.4.6.tar.bz2
         #mkdir /usr/local/gcc-3.4.6
         #cd gcc-3.4.6
         #./configure --prefix=/usr/local/gcc-3.4.6  --enable-threads=posix --enable--long-long --enable-languages=c,c++
         #make
         #make install
     2. 将gcc设置为gcc-3.4.6。
          vi ~/.bashrc
          设置:
          export PATH=/usr/local/gcc-3.4.6/bin:$PATH
          export LD_LIBRARY_PATH=/usr/local/gcc-3.4.6/lib:/usr/local/gcc-3.4.6/lib64:$LD_LIBRARY_PATH
          注意/usr/local/gcc-3.4.6/bin和/usr/local/gcc-3.4.6/lib:/usr/local/gcc-3.4.6/lib64一定要放在最前边。
          保存退出vi,使用source ~/.bashrc是环境设置生效。
     3.  安装第三方包ThirdParty-Sources-2.1.2.tar.gz,先解压缩。
     (1)安装openssl-0.9.7e
          #tar xzvf openssl-0.9.7e.tar.gz
          #mkdir /usr/local/openssl-0.9.7e
          #cd  openssl-0.9.7e
          #./config --prefix=/usr/local/openssl-0.9.7e
          #make
          #make install
     (2)安装expat-1.95.8
          #tar xzvf expat-1.95.8.tar.gz
          #mkdir /usr/local/expat-1.95.8
          #cd  expat-1.95.8
          #./configure --prefix=/usr/local/expat-1.95.8
          #make
          #make install
     (3)安装bzip2-1.0.2
          #tar xzvf bzip2-1.0.2.tar.gz
          #mkdir /usr/local/bzip2-1.0.2
          #cd  bzip2-1.0.2
          修改Makefile文件,将PREFIX指向/usr/local/bzip2-1.0.2
          #make
          #make install
     (4)安装db-4.3.29,这里使用自己下载的db-4.3.29,而不是默认提供的db-4.2.52
          #tar xzvf db-4.3.29.tar.gz
          #mkdir /usr/local/db-4.3.29
          #cd  db-4.3.29
          #cd build_unix
          #../dist/configure --prefix=/usr/local/db-4.3.29 -enable-cxx
          #make
          #make install
     4. 安装Ice-2.1.2
          #tar xzvf Ice-2.1.2.tar.gz
          #cd Ice-2.1.2
          #vi config/Make.rules
          修改如下地方:
          prefix                      = /usr/local/Ice-$(VERSION)
          LP64                       := yes
          BZIP2_HOME           ?= /usr/local/bzip2-1.0.2
          DB_HOME               ?= /usr/local/db-4.3.29
          OPENSSL_HOME      ?= /usr/local/openssl-0.9.7e
          EXPAT_HOME          ?= /usr/local/expat-1.95.8
          
          #make
          #make install
     5. 设置ICE环境变量
         vi ~/.bashrc
         设置:
         export PATH=/usr/local/Ice-2.1.2/bin64:$PATH
         export LD_LIBRARY_PATH=/usr/local/Ice-2.1.2/lib64:$LD_LIBRARY_PATH
        
         保存退出vi,使用source ~/.bashrc是环境设置生效。
         最后不得不吐槽一下Linux下的软件安装,TMD,这是给人用的吗,搞IT的就不是人吗,自己人难为自己人啊,各种版本不兼容,各种缺少依赖文件,在不能联网的情况下,装个东西真是费死牛劲了。还是微软和苹果方便啊。
          什么时候Linux有了傻瓜安装,什么时候再谈桌面市场。
     

 

posted @ 2013-07-09 16:09  jlins  阅读(421)  评论(0编辑  收藏  举报