因为项目的需要,服务器上的程序需要使用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. 几个前端博客 good

    http://www.cnblogs.com/JustinYoung/archive/2011/02/24/fresh-free-html-templates-2010.html http://www ...

  2. linux shell 正则表达式(BREs,EREs,PREs)差异比较

    linux shell 正则表达式(BREs,EREs,PREs)差异比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符 串的单个字符串.在很多文本编辑器或其他工具里 ...

  3. 基于visual Studio2013解决面试题之0210树的最远距离

     题目

  4. J2EE SSH学习(二)安装Eclipse插件和第一个Eclipse项目

    (一)安装Eclipse插件 Eclipse有很多功能很强大的插件,我现在作为一个菜鸟只知道插件的功能通常都很牛叉实用或者很有趣,那么该怎么安装Eclipse插件呢? 我使用的是Eclipse 4.3 ...

  5. ym——安卓巴士总结了近百个Android优秀开源项

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 1.Android团队提供的演示样例项目 假设不是从学习Android SDK中提供的 ...

  6. spring获取bean 实例

    ApplicationContext ctx = new ClassPathXmlApplication("applicationContext.xml"); DataSource ...

  7. 自定义ALV控件的工具条按钮

    *&---------------------------------------------------------------------* *& Report YTEST028 ...

  8. 配置虚拟主机并更改Apache默认解析路径

    配置虚拟主机,非常easy 改动以下文件: 加入以下几句话 <VirtualHost *:80> ##ServerAdmin webmaster@dummy-host2.example.c ...

  9. WinDbg分析DMP文件方法完全攻略

    前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试.在开发人员测试出现的bug,我们可以直接在本地进行调试.如果测试人员测试出崩溃级别的bug, ...

  10. hdu 4715

    #include<stdio.h> #include<string.h> int prime[1100000],p[1000000],ans; void pri() {     ...