ubuntu安装ICE记录
背景
本文档介绍在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记录的更多相关文章
- UBuntu安装配置记录
记得是06年左右第一次安装的 Linux,当时是下载的 Fedora镜像,版本已经记不清了,在商业街的电脑维修店刻的盘,回来后兴冲冲地和XP一起安装的双系统.其实就是直接的体验了一把,只是看了看X-W ...
- ubuntu安装过程记录
[DNS修改] 新下载的ubuntu 17.04 安装后DNS是指向谷歌DNS的,谷歌被屏蔽啦,所以无法解析域名.解决办法: ctrl+alt+t 启动终端 : sudo su 输入管理員密碼,或去 ...
- 为ubuntu安装powerline记录
C:\Users\win10的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\L ...
- ubuntu 1604安装docker-ce 记录
以前在linux 内核为2.x的低版本中安装过docker,但是很多功能特性都无法使用,本次是在ubuntu 16.04上安装,记录安装过程,方便后续查阅. 一.安装前准备: 1. 安装包,允许 ap ...
- ubuntu安装mysql
好记性不如烂笔头,记录一下,ubuntu安装mysql的指令. 安装MySQL: sudo apt-get install mysql-server sudo apt-get install mysq ...
- docker 1.8+之后ubuntu安装指定版本docker-engine
这边记录ubuntu安装过程,首先是官网文档 If you haven’t already done so, log into your Ubuntu instance. Open a termina ...
- ubuntu安装ftp服务器
ubuntu安装ftp服务器 1: 安装vsftpd ~$ sudo apt-get install vsftpd ubuntu10.10自己装了,这步省略. 2: 配置vsftpd 2.1 修改vs ...
- ubuntu安装mysql后不能远程访问的方法
ubuntu安装mysql后不能远程访问的方法1.mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassw ...
- Ubuntu14.04 Tomcat 安装过程记录
Ubuntu14.04 Tomcat 安装过程记录 检查java的版本 zhousp@ubuntu:~$ sudo java -version [sudo] password for zhousp: ...
随机推荐
- Django创建一个简单的blog
1. 使用django-admin.py 创建mysite项目 sunny@sunny-ThinkPad-T450:~/PycharmProjects$ django-admin.py startpr ...
- 最近学习的sql查询语句连接查询,标记一下
select wordbase.name,wb.name,wordconnection.wordid,wordconnection.aid,wordbase.goodsid,goods.hscode, ...
- linux shell 脚本攻略学习 -- head命令详解, tail命令详解
当要查看上千行的大文件时,我们可不会用cat命令把整个文件内容给打印出来,相反,我们可能只需要看文件的一小部分地内容(例如文件的前十行和后十行),我们也有可能需要打印出来前n行或后n行,也有可能打印除 ...
- 【UVA11212 算法竞赛入门经典】 Editing a Book 【IDA*】
题意 你有一篇由n(2<=n<=9)个自然段组成的文章,希望将它们排列成1,2,···,n.可以用剪切和粘贴来完成任务.每次可以剪切一段连续的自然段,粘贴时按照顺序粘贴.注意剪贴板只有一个 ...
- Unity Remote 5 使用
从哪里下载,我是从应用商店里下载的 一. Android版 首先应该确保安装了最新的 Android SDK(这对于在设备上设置端口转发非常必要). 然后,使用 USB 连接线连接设备与电脑,并启动U ...
- JavaScript中的一些小技巧
js 数字操作:1.1 取整:取整有很多方法如: parseInt(a,10); Math.floor(a); a>>0; ~~a; a|0; 前面2种是经常用到的,后面3种算是比较偏的, ...
- 五分钟带你入门TensorFlow
TensorFlow是Google开源的一款人工智能学习系统.为什么叫这个名字呢?Tensor的意思是张量,代表N维数组:Flow的意思是流,代表基于数据流图的计算.把N维数字从流图的一端流动到另一端 ...
- vpp命令总结
create sub BondEthernet0 834 创建子接口,tag是834 set interface ip table BondEthernet0.834 1 将此接口设置在fib 1里 ...
- ServiceStack.Redis.RedisNativeClient的方法“get_Db”没有实现。
项目中用到redis,用nuget导入,但是运行时遇到问题 Exception: “Com.JinYiWei.Cache.RedisHelper”的类型初始值设定项引发异常.System.TypeIn ...
- HDU 1104 Remainder (BFS求最小步数 打印路径)
题目链接 题意 : 给你N,K,M,N可以+,- ,*,% M,然后变为新的N,问你最少几次操作能使(原来的N+1)%K与(新的N)%k相等.并输出相应的操作. 思路 : 首先要注意题中给的%,是要将 ...