Ubuntu中安装ICE3.7.3

前言

上一篇博客,我大概讲述了一下ICE中间件在windows上搭建的过程以及跑通一个小的demo。今天,我们来看一下Ubuntu下如何安装ICE,在Ubuntu上安装ICE相对于windows上简单一些。

安装过程

1.下载并且解压ICE源码压缩包以及第三方库源码的压缩包。
2.使用install指令安装部分第三方库。

sudo apt-get install libssl-dev liblmdb-dev libbluetooth-dev libdbus-1-dev libbz2-dev

3.安装 db-18.1.32
1)解压库的压缩包
2)编译安装:

1.cd build_unix/
2.配置编译选项:../dist/configure --prefix=/usr --enable-cxx
3.make
4.sudo make install

4.安装mcpp.2-7-2
1)解压库的压缩包
2)编译安装:

1.  patch -p0 < ../mcpp/patch.mcpp.2.7.2 
2.  ./configure CFLAGS=-fPIC --enable-mcpplib --disable-shared
3.  make
4.  sudo make install

5.安装expat-2.0.1
1)解压库的压缩包
2)编译安装:

 1) cd expat-2.0.1
 2) ./configure
 3)sudo make install

6.编译安装ICE3.7.3

1) cd ice-3.7.3/cpp
2) make
3) sudo make install 

7.在终端中输入slice2cpp -v,如果出现3.7.3说明ICE安装成功,如果提示命令找不到,则需要再配一下环境变量。
配置环境变量方法如下:

1) sudo gedit  ~/.bashrc
2) 添加行:export PATH=/opt/Ice-3.7.3/bin:$PATH

如下:
在这里插入图片描述
8.配置完环境变量之后执行以下使生效:

source .bashrc

现在再次在终端输入slice2cpp -v 应该可以输出3.7.3了。
9.为了使服务端和客户端代码能够完成编译,需要将库和头文件都添加到系统include和lib文件夹下,或者将库和头文件的目录添加到环境变量。这里我选择把所有的库和头文件全部拷贝到相关目录下:

1)cd ice-3.7.3/cpp/include 
2)sudo cp -rf * /usr/include
3)cd ice-3.7.3/cpp/lib/x86_64-linux-gnu
4)sudo cp -rf  * /usr/lib/x86_64-linux-gnu/

测试Demo

以下demo参考ice c++ demo博客中的内容,当然搞懂了ICE之后,也可以自己写一些其他的接口来测试一下。
1.先建立demo文件夹。
2.在demo文件夹下建立demo.ice文件:

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

3.运行slice2cpp的指令生成相对应的头文件和源文件。

slice2cpp demo.ice

4.编写server端代码:

#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;
}

5.编写客户端:

#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;
}

6.编译服务端和客户端代码,生成可执行文件:

g++ -I. -o server demo.cpp server.cpp -lIce -lIceUtil -lpthread
g++ -I. -o client demo.cpp client.cpp -lIce -lIceUtil -lpthread

7.先执行server

./server

8.在另一个终端上执行client

./client

9.返回服务端所在终端,如果打印了Hello World,就说明ICE安装成功了。
如果要把server端和服务端运行在不同的计算机上,则需要在客户端绑定代理的时候,加入server端机器上的IP地址。
具体代码如下:

Ice::ObjectPrx base = ic->stringToProxy(
                "SimplePrinter:default -h +IP地址 -p 10000");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值