ubuntu安裝ICE記錄

背景
本文檔介紹在unbuntu環境下如何安裝ICE,並用C++寫一個ICE應用html

 

ICE簡介
ICE是ZEROC的開源通訊協議產品,它的全稱是:The Internet Communications Engine,翻譯爲中文是互聯網通訊引擎,是一個流行的面向對象的工具包,使咱們可以以最小的代價構建分佈式應用程序。ICE使咱們專一於應用邏輯的開發,它來處理全部底層的網絡接口編程,這樣咱們就不用去考慮這樣的細節:打開網絡鏈接、網絡數據傳輸的序列化與反序列化、鏈接失敗的嘗試次數等。c++

 

第一部分
下載
源碼下載連接:戳這裏
git

編譯安裝
tar zxvf ice-3.6.0.tar.gz
cd ice-3.6.0/cpp
make
make installgithub

所遇到的問題&解決方法
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
. .bashrcbash

 

第二部分
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 = 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) {
try {
ic->destroy();
} catch (const Ice::Exception& e) {
cerr << e << endl;
status = 1;
}
}
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 = 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->printString("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;
}

 

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

相關文章
相關標籤/搜索