本实验主要介绍如何在Ubuntu 14.04系统上编译安装ZeroC ICE,首先介绍一下ZeroC ICE。

ZeroC ICE是ZeroC公司开发的一套RPC中间件平台,号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯屏蔽。因此相比Corba,DCOM,SOAP,J2EE等的中间件技术,自然是集众多优点于一身,而却没有他们的缺点。

目前ICE平台中包括Ice,Ice-E,Ice Touch。

Ice为主流平台设计,包括Windows和Linux,支持广泛的语言,包括C++,Java,C#(和其他.Net的语言,例如Visual Basic),Python,Ruby,PHP和ActionScript。也包括所有的ICE服务,例如Ice Grid,IceStorm等。

Ice-E是Ice在资源受限的平台上的一个实现,支持C++和嵌入式操作系统,例如Windows CE,Linux。Ice-E本身不包含任何服务,但是可以利用在Ice上提供的各种服务。因此,通过Ice-E,移动设备也能无缝的集成到分布式系统中。

Ice Touch是为iphone和ipod touch开发的版本,包括Object-C映射,支持Iphone OS,并为MAC OS X开发图形界面应用程序提供完整的Cocoa框架的访问。

下面是编译、安装ZeroICE的主要流程:

#下载源码

$ git clone https://github.com/zeroc-ice/ice.git

#安装依赖库libmcpp、openssl

$ sudo apt-get install libmcpp-dev libssl-dev libbz2-dev libexpat1-dev liblmdb-dev

$ cd ice-master

$ make -j4 V=s

$ sudo make install

编译安装成功后,目标文件安装在/opt目录下。测试运行过程如下:

1、编写文件demo.ice

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

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 = 0;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 = 1;} catch (const char * msg) {cerr << msg << endl;status = 1;}if (ic)ic->destroy();return status;
}

client.cpp

#include <Ice/Ice.h>
#include <demo.h>
using namespace demo;
using namespace std;int
main(int argc, char * argv[])
{int status = 0;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 = 1;} catch (const char * msg) {cerr << msg << endl;status = 1;}if (ic)ic->destroy();return status;
}

2、生成demo.cpp

$ slice2cppdemo.ice

$ ls

demo.ice   demo.h  demo.cpp

3、编译运行

$ g++ -I. -oserver demo.cpp server.cpp -lIce -lpthread

$ g++ -I. -oclient demo.cpp client.cpp –lIce -lpthread

$ ./server

$./client

Hello World!

成功在server端打印Hello World!信息表示ZeroC ICE安装成功。

ZeroC ICE 源码编译相关推荐

  1. Qt的源码编译及QtE编译记录

    ============================================================== 作者:shanzongyingcao 网址:http://blog.csd ...

  2. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  3. 5单个编译总会编译全部_玩转Android10(五)源码编译开发中常用命令

    源码开发编译中,熟练掌握常用命令,可以提高开发工作效率.Android源码中,将相关的命令分为如下几类: 1.初始化源码编译环境 初始化编译环境,为后续提供如lunch.make.xxgrep.god ...

  4. mono和monodevelop源码编译安装

    之所以用源码编译的方式安装mono和monodevelop,是因为通过yum安装的mono不是最新版本,而且monodevelop不能建 asp.net MVC3的工程. 而且通过源码安装,可以进一步 ...

  5. nginx源码编译、负载均衡及模块的扩展

    1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...

  6. mac通过tree源码编译安装tree

    通过tree源码编译安装  下载源码:curl -O ftp://mama.indstate.edu/linux/tree/tree-1.6.0.tgz  解压源码:tar xzvf tree-1.6 ...

  7. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...

  8. Nginx 源码编译安装

    Nginx 源码编译安装环境 Centos7 Nginx1.8.1    下载地址:http://nginx.org/download/ 选择自己想要的版本 我这边使用1.8.1,下载地址:http: ...

  9. 基本lnmp平台的搭建(源码编译)

    lnmp :linux ,nginx ,mysql ,php 系统环境:rhel6.0    selinux and iptables disabled  (这里我们都只用源码编译的方式) 1 ste ...

最新文章

  1. 根据标签分布来选择损失函数
  2. laravel 重写以及500错误
  3. 如何利用WebScarab绕过JS验证
  4. linux 下用ecipse 作用oracle 的客户端
  5. 关闭uboot MMU 会导致android2.3 S5pv210 系统不稳定?!why
  6. ubuntu 启动图形界面命令_Windows 10 远程连接 Ubuntu 18.04 Server图形界面
  7. 访问linux端口失败_教你如何配置Linux服务器防火墙端口规则
  8. Java并发(四)——synchronized、volatile
  9. 前景检测算法(五)--GMM,GMM2,GMG
  10. oracle建表空间、用户
  11. Windows Sockets网络编程读书笔记(及简单C/S实现)
  12. svn -- 客户端+服务端的下载安装及配置
  13. tp1900芯片对比7621a_MT7621A和MT7620A两个芯片各有什么特点?
  14. 2021年南京市高考成绩查询,2021年南京各高中高考成绩排名及放榜最新消息
  15. z反变换计算机控制,计算机控制4.Z变换.ppt
  16. python——爬虫豆瓣250
  17. 手摸手,带你用vue撸后台 系列一(基础篇)
  18. 【OSATE学习笔记】EMV2.aadl详解
  19. android视频播放框架Vitamio
  20. Gym - 100889H Hitting Points 计算几何+三分+二分

热门文章

  1. 论文阅读笔记《Fine-tuning Deep Neural Networks in Continuous Learning Scenarios》
  2. 职中计算机专业自我鉴定400字,职高计算机专业自我鉴定范文
  3. 【Python】项目实战一:外星人入侵 - 《Python编程:从入门到实践》
  4. 下载 com.mob.sdk:MobSDK 失败处理
  5. 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程
  6. 香港下一代数字金融基建区块链论坛专家观点(一)
  7. linux挂载sda4,Linux挂载磁盘
  8. 经典二十四点程序游戏
  9. java static作用盘点
  10. noiLinux中编程工具的使用