因为项目的需要,服务器上的程序需要使用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. Mac Eclipse+Maven+TestNg+ReportNg 生成测试报告

    TestNG 是java 的单元测试框架,功能很强大,很方便,但是自动生成的测试报告有待改善,可以使用TestNg 自带的TestNG_xslt更改TestNG报告的样式,这里主要讲解ReportNg ...

  2. uva 147 Dollars(完全背包)

    题目连接:147 - Dollars 题目大意:有11种硬币, 现在输入一个金额, 输出有多少种组成方案. 解题思路:uva 674 的升级版,思路完全一样, 只要处理一下数值就可以了. #inclu ...

  3. HDU 4668 Finding string (解析字符串 + KMP)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个压缩后的串,以及一个模式串,问模式串 ...

  4. Delphi中使用python脚本读取Excel数据

    Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  5. OpenCV五学习: 如何使用命令来启动或关闭OpenCV的CPU指令系统CV_SSE2,CV_SSSE4和其他优化

    在这个博客.我想分享一下OpenCV源代码CPU指令系统CV_SSE2和其他相关知识 一个.    CV_SSE系列指令集的预编译符号定义在opencv2/core/internal.hpp这个头文件 ...

  6. Swift - 类的计算属性(使用get和set来间接获取/改变其他属性的值)

    1,Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值,代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Calc ...

  7. Qt多线程(有详细例子)

    Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了开始一个新线程的方法QThreadStorage 提供逐线程数据存储QMutex  提供相互排斥的锁,或互斥量QMutexLocker ...

  8. C#写的客户端连接 php的服务器端的小例子

    C#写的客户端连接 php的服务器端的小例子 php的server 端 <?php // server.php set_time_limit( 0 ); ob_implicit_flush(); ...

  9. 第二章排错的工具:调试器Windbg(上)

    感谢博主 http://book.51cto.com/art/200711/59731.htm <Windows用户态程序高效排错>第二章主要介绍用户态调试相关的知识和工具.本文主要讲了排 ...

  10. rcp(插件开发)org.eclipse.ui.decorators 使用

    org.eclipse.ui.decorators这个扩展点可以为对应的节点添加不同的图标显示. 使用方式都差不多,以下就转载一下使用方式: 1.添加扩展点 org.eclipse.ui.decora ...