因为项目的需要,服务器上的程序需要使用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有了傻瓜安装,什么时候再谈桌面市场。
     

Ice-2.1.2在RHEL Server 5.5上的安装的更多相关文章

  1. RHEL Server 6.3下MySQL5.5.25a源码安装

    OS:RHEL Server 6.3 MySQL:mysql-5.5.25a.tar.gz 相关依赖包: ncurses-5.9.tar.gz bison-2.5.tar.gz 安装MySQL 一.安 ...

  2. Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入(1)

    一.本系列分为6部分 1.Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入 2.Centos 6.5 下安装 Zabbix server 3.0服务器的安 ...

  3. Sql Server 2008卸载后再次安装一直报错

    sql server 2008卸载之后再次安装一直报错问题. 第一:由于上一次的卸载不干净,可参照百度完全卸载sql server2008 的方式 1. 用WindowsInstaller删除所有与S ...

  4. Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题

    Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题钉子 发表于 2010-5-22 1:42:51问题描述 ...

  5. 在Windows Server 2012服务器上安装可靠多播协议

    为什么要安装可靠多播协议?   答:随着因特网的发展,出现了视频点播.电视会议.远程学习.计算机协同工作等新业务.传统的点到点通信方式,不仅浪费大量的网络带宽,而且效率很低.一种有效利用现有带宽的技术 ...

  6. 在 Windows Server 2008 R2 上安装 IIS 7.5

    原文 在 Windows Server 2008 R2 上安装 IIS 7.5 默认情况下,Windows Server(R) 2008 R2 上不安装 IIS 7.5.可以使用服务器管理器中的“添加 ...

  7. SQL Server 2012 酸爽的安装体验

    电脑上已经安装了SQL Server 2008 R2,要想安装SQL Server 2012,必须先将已安装的SQL Server 2008 R2 安全卸载,否则安装过程中会报错! 使用到的卸载软件有 ...

  8. SQL Server系列之SQL Server 2016 中文企业版详细安装步骤(超多图)

    1. 下载地址 下载地址 :https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/ 官方技术文档:https:// ...

  9. 图文详解在Windows server 2008 R2上安装SQL Server 2012集群

    1.准备: 4台服务器(1台AD.2台SQL服务器.1台iSCSI存储服务器) 9个IP(1个AD的IP.2个SQL服务器的IP.2个心跳IP.1个iSCSI存储服务器的IP.1个集群IP.1个DTC ...

随机推荐

  1. fzu 1909 An Equation(水题)

    题目链接:fzu 1909 An Equation 典型的签到题. #include <stdio.h> #include <string.h> bool judge(int ...

  2. asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装)

    原文  asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装) 检测Office是否安装以及获取安装 路径 及安装版本  代码如下 复制代码 #region 检测Office是否 ...

  3. HDU-1039-Easier Done Than Said?(Java &amp;&amp; 没用正則表達式是我的遗憾.....)

    Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  4. hdu1695(莫比乌斯)或欧拉函数+容斥

    题意:求1-b和1-d之内各选一个数组成数对.问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数 ...

  5. VI01增强问题

    函数'SD_SCD_ITEM_PRICING_DATA_GET',其实在增强中和交货相关的数据在这个函数中都可以取到,没有必要再从LIKP.LIPS等等中重新取数. include程序RV64A631 ...

  6. javascript学习笔记--迭代函数

    概要 这里的迭代函数指的是对数组对象的操作方法,js数组共有五个迭代函数:every.fifter.forEach.map.some. 1.every every方法,返回值为Boolean类型,tr ...

  7. js获取上传文件的绝对路径

    在html中    <input type="file" id="importFile" />    <input type="bu ...

  8. python中的中文编码

    我现在编写python代码,有一些内容需要用中文编写,例如注释,一些其它的东西 默认python是不支持中文的,包括两个方面不支持,一是文件编码默认是ansi的,二是虚拟机运行解析脚本时也是非utf的 ...

  9. Swift - 类和结构体的区别

    类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承和扩展,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型 ...

  10. gulp多张图片自动合成雪碧图

    相信做前端的同学都做过这样的事情,为优化图片,减少请求会把拿到切好的图标图片,通过ps(或者其他工具)把图片合并到一张图里面,再通过css定位把对于的样式写出来引用的html里面.对于一些图片较多的项 ...