zoukankan      html  css  js  c++  java
  • 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有了傻瓜安装,什么时候再谈桌面市场。
         
  • 相关阅读:
    最大熵原理
    python单引号、双引号和三双引号的区别
    python的字典
    hadoop jar xxxx.jar 执行的流程
    java 正则表达式
    secureCRT中vim个性化设置
    python关系运算符的全称
    C# 分割字符
    委托(delegate)
    在C#中,委托(delegate)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3180287.html
Copyright © 2011-2022 走看看