因为项目的需要,服务器上的程序需要使用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. 【ASP.NET Web API教程】3 Web API客户端

    原文:[ASP.NET Web API教程]3 Web API客户端 Chapter 3: Web API Clients 第3章 Web API客户端 本文引自:http://www.asp.net ...

  2. jquery mobile 对手势触控提供了如下几个事件监听:

    jquery mobile 对手势触控提供了如下几个事件监听: 复制代码代码如下: tap  当用户点屏幕时触发taphold 当用户点屏幕且保持触摸超过1秒时触发swipe 当页面被垂直或者水平拖动 ...

  3. HEVC码率控制浅析——HM代码阅读之四

    继续分析第一篇提到的compressSlice中对LCU的RC参数初始化: #if RATE_CONTROL_LAMBDA_DOMAIN Double oldLambda = m_pcRdCost-& ...

  4. KNN算法理解

    一.算法概述 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平庸的分类器或许是那种死记硬背式的分类器,记住全部的训练数据,对于新的数 ...

  5. keyset与entryset

    1.基本概述 Set<Map.Entry<K,V>> entrySet()  返回此映射中包括的映射关系的 set 视图. Set<K>              ...

  6. Codeforces Round #218 (Div. 2)

    500pt, 题目链接:http://codeforces.com/problemset/problem/371/A 分析:k-periodic说明每一段长度为k,整个数组被分成这样长度为k的片段,要 ...

  7. setsockopt()使用方法()参数说明

    int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): level:(级别): 指定 ...

  8. [翻译]利用C#获取终端服务(Terminal Services)会话的闲置时间

    [翻译]利用C#获取终端服务(Terminal Services)会话的闲置时间 作者:Tuuzed(土仔)   发表于:2008年2月29日版权声明:可以任意转载,转载时请务必以超链接形式标明文章原 ...

  9. Python学习入门基础教程(learning Python)--5.3 Python写文件基础

    前边我们学习了一下Python下如何读取一个文件的基本操作,学会了read和readline两个函数,本节我们学习一下Python下写文件的基本操作方法. 这里仍然是举例来说明如何写文件.例子的功能是 ...

  10. Xcode 4.6.2 运行次数为偶数程序崩溃问题

    如果你的MAC 系统升级到10.8.4  Xcode升级到4.6.2,在工程运行第二次.第四次.第六次 ... 的时候程序就会崩溃 无论是新建的模板工程也会这样,这个属于系统BUG,在stackove ...