当前位置: 首页 > 工具软件 > Zeroc ICE > 使用案例 >

ZeroC ICE 源码编译

南宫阳焱
2023-12-01

      本实验主要介绍如何在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安装成功。

 类似资料: