ubuntu 14.04下是可以通过下面这条指令安装ice3.5的

sudo apt-get install libzeroc-ice35-dev

1. 从这里下载ice源文件

主要包括两部分:ice3.5.1.tar.gz和第三方依赖包ThirdParty-Sources-3.5.1.tar.gz

2. 安装第三方依赖

第三方依赖包中只含有berkely DB和mcpp两个依赖包,还缺少bzip、expat、openssl。

2.1) 安装berkely DB

$tar xvf ThirdParty-Sources-3.5..tar.gz
$cd ThirdParty-Sources-3.5.
$tar zxvf db-5.3..NC.tar.gz
$cd db-5.3..NC/
$patch -p0 < ../db/patch.db.5.3.
$cd build_unix/
$../dist/configure --prefix=/usr --enable-cxx
$make && make install

2.2) 安装mcpp

$tar xvf mcpp-2.7..tar.gz
$cd mcpp-2.7.
$patch -p0 < ../mcpp/patch.mcpp.2.7.
$./configure CFLAGS=-fPIC --prefix=/usr --enable-mcpplib --disable-shared
$make && make install

2.3) 安装bzip[下载]

$tar zxvf bzip2-1.0..tar.gz
$cd bzip2-1.0./
$make && make install

错误提示:/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_ARM_THM_MOVW_ABS_NC against `BZ2_crc32Table’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: error adding symbols: Bad value
解决:bzip没有装好,一般是64 位 电脑才会出现。上面已经提示了recompile with
-fPIC。所以回到bzip目录,修改Makefile文件,CC = gcc —> CC = gcc -fPIC,再次make
&& make install

2.4) 安装expat[下载]

$tar jxvf expat-2.1..tar.bz2
$cd expat-2.1./
$./configure --prefix=/usr
$make && sudo make install

2.5) 安装openssl[下载]

$unzip OpenSSL_0_9_8-stable.zip
$cd openssl-OpenSSL_0_9_8-stable/
$./config --prefix=/usr --openssldir=/usr/openssl(openssldir默认为/usr/ssl/openssl,需要修改,否则默认安装路径会找不到。)
$make
$make test
$sudo make install

错误提示:/usr/bin/ld: /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../../lib/libssl.a(s23_meth.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
解决:这个错误和问题2是一样的,因此修改Makefile文件,CC = gcc —> CC = gcc -fPIC,再次make && make install

3. 安装ice

$tar zxvf v3.5.1.tar.gz
$cd ice-3.5./cpp/ (这里只是安装了ice的c++模块)
$make && sudo make install

大概等了20多分钟报错,

make[]: Leaving directory `/root/ice_ws/ice_source/ice-3.5./cpp/demo/book/map_filesystem'
make[]: Leaving directory `/root/ice_ws/ice_source/ice-3.5./cpp/demo/book'
make[]: Leaving directory `/root/ice_ws/ice_source/ice-3.5./cpp/demo'
make[]: Leaving directory `/root/ice_ws/ice_source/ice-3.5./cpp'
making all in java
make[]: Entering directory `/root/ice_ws/ice_source/ice-3.5./java'
ant -emacs
make[]: ant: Command not found
make[]: *** [all] Error
make[]: Leaving directory `/root/ice_ws/ice_source/ice-3.5./java'
make: *** [all] Error

发现是java环境需要的ant,直接进入makefile进行修改,因为此处开发只需要用到c++,并且需要进行移植,所以将makefile修改成下面内容:

# **********************************************************************
#
# Copyright (c) - ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
#
# ********************************************************************** SUBDIRS = cpp
CLEAN_SUBDIRS = cpp
DEPEND_SUBDIRS = cpp
INSTALL_SUBDIRS = cpp all::
@for subdir in $(SUBDIRS); \
do \
echo "making all in $$subdir"; \
( cd $$subdir && $(MAKE) all ) || exit ; \
done clean::
@for subdir in $(CLEAN_SUBDIRS); \
do \
echo "making clean in $$subdir"; \
( cd $$subdir && $(MAKE) clean ) || exit ; \
done depend::
@for subdir in $(DEPEND_SUBDIRS); \
do \
echo "making depend in $$subdir"; \
( cd $$subdir && $(MAKE) depend ) || exit ; \
done install::
@for subdir in $(INSTALL_SUBDIRS); \
do \
echo "making install in $$subdir"; \
( cd $$subdir && $(MAKE) install ) || exit ; \
done test::
@for subdir in $(SUBDIRS); \
do \
echo "making test in $$subdir"; \
( cd $$subdir && $(MAKE) test ) || exit ; \
done cpp::
echo "making all in cpp";
( cd cpp && $(MAKE) all ) || exit ;

然后make && make  install,通过。

5. 测试用例

建立一个print目录,在该目录下:

建立ice文件demo.ice

module demo
{
interface printer
{
void printerstr(string msg);
}; };

运行下面的命令,会在print目录下生成demo.h和demo.cpp。

$slice2cpp demo.ice

发现没有slice2cpp这条指令,添加系统环境gedit /etc/environment

将生成的bin目录导入,或者在~/.bashrc里添加PATH

:/opt/Ice-3.5./bin

运行上面命令,报错如下:

slice2cpp: error while loading shared libraries: libSlice.so.: cannot open shared object file: No such file or directory

编译生成的环境加入到系统环境中gedit  ~/.bashrc

#在PATH中找到可执行文件程序的路径。
export PATH =$PATH:/opt/Ice-3.5./bin #g++找到头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/Ice-3.5./include
export CPLUS_INCLUDE_PATH #找到动态链接库的路径
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/Ice-3.5./lib
export LD_LIBRARY_PATH

保存,source ~/.bashrc,重新执行上述命令,OK,在print目录下生成demo.h和demo.cpp。

编写ice服务端server.cpp

#include <Ice/Ice.h>
#include <demo.h>
using namespace demo;
using namespace std;
class PrinterI : public printer {
public:
virtual void printerstr(const string & s,
const Ice::Current &);
};
void
PrinterI::
printerstr(const string & s, const Ice::Current &)
{
cout << s << endl;
}
int
main(int argc, char* argv[])
{
int status = ;
Ice::CommunicatorPtr ic;
try {
ic = Ice::initialize(argc, argv);
Ice::ObjectAdapterPtr adapter
= ic->createObjectAdapterWithEndpoints(
"SimplePrinterAdapter", "default -p 10000");
Ice::ObjectPtr object = new PrinterI;
adapter->add(object,
ic->stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
} catch (const Ice::Exception & e) {
cerr << e << endl;
status = ;
} catch (const char * msg) {
cerr << msg << endl;
status = ;
}
if (ic)
ic->destroy();
return status;
}

编写ice客户端client.cpp

#include <Ice/Ice.h>
#include <demo.h>
using namespace demo;
using namespace std; int
main(int argc, char * argv[])
{
int status = ;
Ice::CommunicatorPtr ic;
try {
ic = Ice::initialize(argc, argv);
Ice::ObjectPrx base = ic->stringToProxy(
"SimplePrinter:default -p 10000");
printerPrx printer = printerPrx::checkedCast(base);
if (!printer)
throw "Invalid proxy";
printer->printerstr("Hello World!");
} catch (const Ice::Exception & ex) {
cerr << ex << endl;
status = ;
} catch (const char * msg) {
cerr << msg << endl;
status = ;
}
if (ic)
ic->destroy();
return status;
}

编译并运行客户端和服务端,如果hello world打印出来,那么就是安装成功了。

$ g++ demo.cpp server.cpp -lIce -L/opt/Ice-3.5./lib -lIceUtil -lpthread -o server
$ g++ demo.cpp client.cpp -lIce -L/opt/Ice-3.5./lib -lIceUtil -lpthread -o client
$ ./server $./client
Hello World!

至此,安装成功!!!

原文参考http://blog.csdn.net/w1282109144/article/details/51426361

ubuntu14.04下安装ice3.5.1的更多相关文章

  1. Ubuntu14.04下安装Hadoop2.5.1 (单机模式)

    本文地址:http://www.cnblogs.com/archimedes/p/hadoop-standalone-mode.html,转载请注明源地址. 欢迎关注我的个人博客:www.wuyudo ...

  2. 二、Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)

    在Ubuntu14.04下安装Hadoop2.4.0 (单机模式)基础上配置 一.配置core-site.xml /usr/local/hadoop/etc/hadoop/core-site.xml ...

  3. Ubuntu14.04下安装Flash Player

    Ubuntu14.04下安装Flash Player youhaidong@youhaidong:~$ sudo apt-get install flashplugin-nonfree [sudo] ...

  4. Ubuntu14.04下 安装p4c

    参考: Github p4c README Ubuntu14.04下 安装p4c 这里提供一个直接安装p4c的脚本:install_p4c.sh. 1.git clone下来p4c: $ git cl ...

  5. Ubuntu14.04下安装Libsvm,并使用Libsvm

    (1)Ubuntu14.04下安装Libsvm 转载:https://blog.csdn.net/katrinawj/article/details/78915874 一.下载: 网址:http:// ...

  6. ubuntu14.04下安装ffmpeg

    ubuntu14.04下安装ffmpeg 一.安装各种依赖包 1.yasm(libx264需要依赖yasm) sudo apt-get install yasm 2.libx264 sudo apt- ...

  7. ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录

    已有条件: ubuntu14.04+cuda7.5+anaconda2(即python2.7)+matlabR2014a 上述已经装好了,开始搭建caffe环境. 1. 装cudnn5.1.3,参照: ...

  8. 在Ubuntu14.04下安装Docker CE(1) - repository篇

    从2017年3月开始,Docker开始分为社区版本和企业版,也就是Docker CE和Docker EE, 原来Ubuntu14.04下,通过sudo apt-get install docker.i ...

  9. ubuntu14.04下安装爬虫工具scrapy

    scrapy是目前准备要学习的爬虫框架,其在ubuntu14.04下的安装过程如下: ubuntu14.04下默认安装了2.7的python以及setuptools,若未安装,可通过下面指令安装: s ...

随机推荐

  1. spring.net AOP配置基础

    在第一篇中,我们用配置代理工厂的方式实现了面向切面记日志的功能.非常便捷的实现了AOP,但当我们需要对多个切入点配置通知的时候就需要声明多个代理工厂,这样导致配置文件内容过多,配置过程也很繁琐.spr ...

  2. VIM批量文件查找和替换

    使用vim时间不长,linux命令行下常用的文本编辑工具,所以需要掌握一些基本的用法.很多不会的不是百度就谷歌,总有你想要的答案. 1. 批量文件查找内容 vimgrep 比如在当前目录下查找带有“a ...

  3. TCMalloc小记

    周末抽空看了一下tcmalloc,了解了个大概.下面记录一下. 一. 原理 tcmalloc就是一个内存分配器,管理堆内存,主要影响malloc和free,用于降低频繁分配.释放内存造成的性能损耗,并 ...

  4. a5站长论坛和s8站长论坛-网上兼职做任务赚钱的两大网站

     1.什么是做任务赚钱? 简而言之,就是你做别人不在行而你在行的技术 ,如 图片美化 网站建设 网站修改 网站推广等网络业务. 2.任务赚钱有什么特点? 完全免费,你付出的是技术和时间,完全免费,不过 ...

  5. Exchange Server 2013 一步步安装图解[完全步骤截图]

    前言: 这是一份为Exchange菜鸟准备的2013版本安装文档,安装环境为Windows Server 2012 DataCenter 版本,在安装之前,我对安装Exchange也是处于一无所知的状 ...

  6. gcc与g++的区别与联系

    gcc和g++都是GNU(组织)的编译器. 一.误区详解 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的文件,   gcc把它当作是C程序,而g++ ...

  7. Dell-R730 【Pxe+dhcp+ftp+tftp+Kickstart+CentOs6.6】

    IP:10.104.0.101 [root@localhost network-scripts]# cat ifcfg-em1 [root@localhost network-scripts]# ip ...

  8. 新mac上安装,查看,设置一些常用的软件

    安装 brew install ~ 查看相关信息 brew info ~ 设置登录自启动 brew services start ~(本质是在~/Library/LaunchAgents/下面加了对应 ...

  9. js 判断是否为正数

    function validate(num) { var reg = /^\d+(?=\.{0,1}\d+$|$)/   if(reg.test(num)) return true;   return ...

  10. oc底层方法调用流程

    1.对象方法保存到类对象里面,每个类对象中都有一个方法列表.类方法保存在元类中方法列表 a.通过isa指针去对应的类中查找: b.生成方法编号,根据方法编号查找对应的方法(找到只是最终实现地址,根据地 ...