背景
本文档介绍在unbuntu环境下如何安装ICE,并用C++写一个ICE应用

ICE简介
ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个流行的面向对象的工具包,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数等。

第一部分
下载
源码下载链接:戳这里

编译安装
tar zxvf ice-3.6.0.tar.gz
cd ice-3.6.0/cpp
make
make install

所遇到的问题&解决方法
1)ConnectionI.cpp:28:19: error: bzlib.h: 没有那个文件或目录
sudo apt-get install libmcpp-dev

2)../Freeze/TransactionI.h:15:20: error: db_cxx.h: 没有那个文件或目录
安装Berkeley DB,具体可参考:戳这里
BDB环境配置:
export DB_HOME=/usr/local/BerkeleyDB.4.6
PATH=$PATH:$DB_HOME/bin
. .bashrc

第二部分
1.创建ICE文件Printer.ice

module Demo {
interface Printer {
void printString(string s);
};
};

2.Compiling a Slice Definition for C++
$ slice2cpp Printer.ice

3.创建Server.cpp

#include <Ice/Ice.h>
#include <Printer.h> using namespace std;
using namespace Demo; class PrinterI : public Printer {
public:
virtual void printString(const string& s, const Ice::Current&);
}; void
PrinterI::
printString(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) {
try {
ic->destroy();
} catch (const Ice::Exception& e) {
cerr << e << endl;
status = ;
}
}
return status;
}

4.创建Client.cpp

#include <Ice/Ice.h>
#include <Printer.h> using namespace std;
using namespace Demo; 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->printString("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;
}

5.测试

1.环境配置
export ICE_HOME=/opt/Ice-3.6.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DB_HOME/lib64:/home/bran/ice-3.6.0/cpp

$ c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp
$ c++ -o server Printer.o Server.o -L$ICE_HOME/lib -lIce -lIceUtil -lpthread

$ c++ -I. -I$ICE_HOME/include -c Printer.cpp Client.cpp
$ c++ -o client Printer.o Client.o -L$ICE_HOME/lib -lIce -lIceUtil -lpthread

ubuntu安装ICE记录的更多相关文章

  1. UBuntu安装配置记录

    记得是06年左右第一次安装的 Linux,当时是下载的 Fedora镜像,版本已经记不清了,在商业街的电脑维修店刻的盘,回来后兴冲冲地和XP一起安装的双系统.其实就是直接的体验了一把,只是看了看X-W ...

  2. ubuntu安装过程记录

    [DNS修改] 新下载的ubuntu 17.04 安装后DNS是指向谷歌DNS的,谷歌被屏蔽啦,所以无法解析域名.解决办法: ctrl+alt+t 启动终端 : sudo su  输入管理員密碼,或去 ...

  3. 为ubuntu安装powerline记录

    C:\Users\win10的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\L ...

  4. ubuntu 1604安装docker-ce 记录

    以前在linux 内核为2.x的低版本中安装过docker,但是很多功能特性都无法使用,本次是在ubuntu 16.04上安装,记录安装过程,方便后续查阅. 一.安装前准备: 1. 安装包,允许 ap ...

  5. ubuntu安装mysql

    好记性不如烂笔头,记录一下,ubuntu安装mysql的指令. 安装MySQL: sudo apt-get install mysql-server sudo apt-get install mysq ...

  6. docker 1.8+之后ubuntu安装指定版本docker-engine

    这边记录ubuntu安装过程,首先是官网文档 If you haven’t already done so, log into your Ubuntu instance. Open a termina ...

  7. ubuntu安装ftp服务器

    ubuntu安装ftp服务器 1: 安装vsftpd ~$ sudo apt-get install vsftpd ubuntu10.10自己装了,这步省略. 2: 配置vsftpd 2.1 修改vs ...

  8. ubuntu安装mysql后不能远程访问的方法

    ubuntu安装mysql后不能远程访问的方法1.mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassw ...

  9. Ubuntu14.04 Tomcat 安装过程记录

    Ubuntu14.04 Tomcat 安装过程记录 检查java的版本 zhousp@ubuntu:~$ sudo java -version [sudo] password for zhousp: ...

随机推荐

  1. 实现二叉树的基本操作(Java版)

    近期研究了一下二叉树,试着用Java语言实现了二叉树的基本操作,下面分享一下实现代码: package com.sf.test; import java.util.ArrayDeque; import ...

  2. css垂直居中方案

    先介绍几种常见的垂直布局方式: 已知盒子具体宽度(宽度可以为百分比)(适用于居中浮动元素) 第一种: 给父元素相对定位,给子元素绝对定位 父布局 { position: relative; } 子布局 ...

  3. 小程序动态生成二维码,生成image图片

    前端: <image src="{{img_usrl}}" style="width:100%;height:104px;" bindlongtap=&q ...

  4. RGB直方图与UV直方图

    ------------------------------------------------------------------------------------ from skimage im ...

  5. 882. Reachable Nodes In Subdivided Graph

    题目链接 https://leetcode.com/contest/weekly-contest-96/problems/reachable-nodes-in-subdivided-graph/ 解题 ...

  6. Weblogic10.3.6部署解决CXF webService 调用报错: “Cannot create a secure XMLInputFactory”

    一,解决步骤 1.添加jar包 stax2-api-3.1.4.jar woodstox-core-asl-4.4.1.jar 2.编写监听器 package com.neusoft.cxf.list ...

  7. Oracle和Mysql的区别 转载

    一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他se ...

  8. qy Undefied index报错

    目测是不支持如下写法 $value['status'] = $map[$value['status']];

  9. [Jenkins] 执行SoapUI的task,设置邮件内容为HTML+CSS

    设置邮件内容:Default Content <span style="font-family:verdana;font-size:16px;color:black;font-weig ...

  10. ServletRequest面试题

    使用request获得请求行:String getmethod():获得请求的资源:String getcontextpath():----web应用名称request是一个域对象request完成请 ...