真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SylixOS移植ICE庫總結(jié)

1 ICE 簡介

      ICE(Internet Communications Engine)是一種面向?qū)ο蟮闹虚g件平臺(tái),主要用于網(wǎng)絡(luò)通訊。它為面向?qū)ο蟮摹翱蛻舳?服務(wù)器”模型的應(yīng)用提供了一組很好的工具和API接口。目前在全世界被應(yīng)用于很多項(xiàng)目之中。ICE中間件號(hào)稱標(biāo)準(zhǔn)統(tǒng)一,開源,跨平臺(tái),跨語言,分布式,安全,服務(wù)透明,負(fù)載均衡,面向?qū)ο?,性能?yōu)越,防火期穿透,通訊屏蔽。因此相比Corba,DCOM,SOAP,J2EE等的中間件技術(shù),自然是集眾多優(yōu)點(diǎn)于一身,而卻沒有他們的缺點(diǎn)。

在鶴山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),營銷型網(wǎng)站,外貿(mào)網(wǎng)站制作,鶴山網(wǎng)站建設(shè)費(fèi)用合理。

 
2 資源獲取

      在官網(wǎng)下載第三方中間件資源,ZeroC ICE的官方下載網(wǎng)站為:https://zeroc.com/downloads/ice#source。本文中使用的版本是V3.7,下載后解壓文件,文件目錄如圖 2.1所示。

SylixOS移植ICE庫總結(jié)

                                                        圖2.1 Ice源碼解壓后的文件

      cpp/、csharp/、java/、js/、objective-c/、php/、python/等目錄包含了對(duì)應(yīng)語言的Ice庫實(shí)現(xiàn)代碼,config/目錄中存放控制編譯方式的相關(guān)配置文件,slice/中存放了slice相關(guān)工具的代碼實(shí)現(xiàn)。

 
3 Linux 平臺(tái)編譯

      ICE支持多種語言,并且默認(rèn)情況下會(huì)編譯所有語言支持。這里只需要移植C++相關(guān)代碼,需要修改config/Make.rules中的supported-languages屬性,刪除不需要的語言支持只保留C++支持,如圖 3.1所示。

SylixOS移植ICE庫總結(jié)

                                                              圖 3.1 supported-languages屬性修改

      修改配置文件后直接在根目錄make即可進(jìn)入編譯過程。為了方便后期的移植工作,這里使用V=s選項(xiàng)打印編譯詳細(xì)過程并保存到Make.log文件中,命令:# make V=s > Make.log。編譯結(jié)束后查看Make.log內(nèi)容確認(rèn)編譯成功。

 
4 移植工作

       本次移植僅移植C++支持部分的ICE主庫即libIce.so,因此只需要使用到cpp目錄下的代碼文件。由于是C++代碼,在創(chuàng)建工程時(shí)需要選中C++工程選項(xiàng)。ICE主庫代碼編譯需要依賴libbz2,也需要提前準(zhǔn)備。

 
4.1 工程創(chuàng)建

      在Real-Evo IDE中創(chuàng)建libIce的動(dòng)態(tài)庫工程。創(chuàng)建時(shí)選中C++工程選項(xiàng)并打開專家模式,如圖 4.1所示。

SylixOS移植ICE庫總結(jié)

                                        圖 4.1 創(chuàng)建工程選項(xiàng)

      刪除src目錄下的libIce.c文件,導(dǎo)入源碼包中的cpp/目錄下與主庫相關(guān)的代碼文件。這里需要注意的是很多代碼文件是編譯過程中使用slice工具創(chuàng)建的,因此需要在linux環(huán)境下編譯成功后才能導(dǎo)出所有的文件。其中包括目錄cpp/include/generated/Ice/、cpp/include/Ice/、cpp/include/IceUtil/、cpp/src/Ice/、cpp/src/IceUtil/。最終的目錄結(jié)構(gòu)如圖 4.2所示。

SylixOS移植ICE庫總結(jié)

                      圖 4.2 Ice代碼目錄結(jié)構(gòu)

 
4.2 配置libIce.mk

      分析Make.log中編譯libIce.so的過程,羅列出所有需要編譯的cpp文件,并逐一加入LOCAL_SRCS中,如圖 4.3所示。

SylixOS移植ICE庫總結(jié)

                                圖 4.3 添加cpp文件

      添加相關(guān)的頭文件搜索目錄,其中包括libbz2的工程路徑,如圖 4.4所示。

SylixOS移植ICE庫總結(jié)

                        圖 4.4 頭文件搜索路徑

 

      添加宏配置,如圖 4.5所示。

SylixOS移植ICE庫總結(jié)

                             圖 4.5 添加宏配置

      添加編譯選項(xiàng),如圖 4.6所示。

SylixOS移植ICE庫總結(jié)

                             圖 4.6 添加編譯選項(xiàng)

      添加依賴庫,包括對(duì)libbz2庫的依賴,如圖 4.7所示。

SylixOS移植ICE庫總結(jié)

                             圖 4.7 添加依賴庫

      打開C++編譯擴(kuò)展,如圖 4.8所示。

SylixOS移植ICE庫總結(jié)

                             圖 4.8 打開C++編譯擴(kuò)展

 
4.3 代碼修改

      默認(rèn)編譯會(huì)出現(xiàn)若干編譯錯(cuò)誤,需對(duì)部分代碼進(jìn)行修改,具體修改內(nèi)容如下:

    修改src/ice-master/cpp/src/Ice/Cond.cpp,使用CLOCK_REALTIME模式或是時(shí)間信息,如圖 4.9所示。

SylixOS移植ICE庫總結(jié)

                           圖 4.9 修改獲取時(shí)間方式

    修改src/ice-master/cpp/include/IceUtil/Config.h,增加DSP大小端配置,如圖 4.10所示。

SylixOS移植ICE庫總結(jié)

                           圖 4.10 DSP大小端配置

    修改src/ice-master/cpp/include/Ice/Service.h,DSP中interrupt符號(hào)沖突,更改為interrupt2,如圖 4.11所示。

SylixOS移植ICE庫總結(jié)

                          圖 4.11 interrupt符號(hào)沖突

    修改src/ice-master/cpp/include/IceUtil/Config.h,消除DSP中GNUC版本錯(cuò)誤,如圖 4.12所示。

SylixOS移植ICE庫總結(jié)

                        圖 4.12消除GNUC版本錯(cuò)誤

    修改src/ice-master/cpp/src/Ice/DynamicLibrary.cpp,DSP中刪除動(dòng)態(tài)庫相關(guān)操作,如圖 4.13所示。

SylixOS移植ICE庫總結(jié)

SylixOS移植ICE庫總結(jié)

                          圖 4.13 DSP中刪除動(dòng)態(tài)庫相關(guān)操作

    修改src/ice-master/cpp/src/Ice/Instance.cpp,增加頭文件grp.h,如圖 4.14所示。

SylixOS移植ICE庫總結(jié)

                         圖 4.14增加頭文件grp.h

    修改src/ice-master/cpp/src/Ice/MetricsAdminI.cpp,DSP中增加部分缺失接口,如圖 4.15圖 4.16圖 4.17所示。

SylixOS移植ICE庫總結(jié)

                      圖 4.15 DSP中增加部分缺失接口

SylixOS移植ICE庫總結(jié)

                       圖 4.16 DSP中增加部分缺失接口

SylixOS移植ICE庫總結(jié)

                        圖 4.17 DSP中增加部分缺失接口

    src/ice-master/cpp/src/Ice/Network.cpp,DSP中增加缺失的部分接口,如圖 4.18圖 4.19圖 4.20圖 4.21圖 4.22所示。

SylixOS移植ICE庫總結(jié)

                     圖 4.18 DSP中增加缺失的部分接口

SylixOS移植ICE庫總結(jié)

                       圖4.19 DSP中增加缺失的部分接口

SylixOS移植ICE庫總結(jié)

                      圖 4.20 DSP中增加缺失的部分接口

SylixOS移植ICE庫總結(jié)

                     圖 4.21 DSP中增加缺失的部分接口

SylixOS移植ICE庫總結(jié)

                   圖 4.22 DSP中增加缺失的部分接口

    src/ice-master/cpp/src/Ice/Service.cpp,刪除fork調(diào)用相關(guān)代碼,如圖 4.23所示。

SylixOS移植ICE庫總結(jié)

                   圖 4.23刪除fork調(diào)用相關(guān)代碼

    src/ice-master/cpp/src/Ice/Thread.cpp,糾正pthread_join返回值差異,如圖 4.24所示。

SylixOS移植ICE庫總結(jié)

                  圖 4.24糾正pthread_join返回值差異

    src/ice-master/cpp/src/IceUtil/RecMutex.cpp,糾正pthread_mutex_trylock返回值差異,如圖 4.25所示。

SylixOS移植ICE庫總結(jié)

                  圖 4.25糾正pthread_mutex_trylock返回值差異

    src/ice-master/cpp/src/IceUtil/UtilException.cpp,DSP中使用strdup代替接口__cxa_demangle,如圖 4.26所示。

SylixOS移植ICE庫總結(jié)

                   圖 4.26 DSP中使用strdup代替接口__cxa_demangle

 
5 ICE 基本使用

      ICE應(yīng)用架構(gòu)是服務(wù)器客戶端模式,包括服務(wù)端和客戶端兩部分代碼??蛻舳撕头?wù)器代碼由slice工具所生成的接口代碼聯(lián)系到一起。下面使用ICE運(yùn)行一個(gè)簡單的helloworld測試?yán)獭?/p>

5.1 生成接口代碼

      編寫接口代碼demo.ice,如程序清單 5.1所示。

                                                                      程序清單 5.1 demo.ice

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

};

      在linux中使用ICE源碼中編譯生成的slice工具生成接口代碼:

 

      # cpp/bin/slice2cpp  demo.ice

      可在當(dāng)前目錄中生成接口代碼demo.cpp、demo.h。

 
5.2 創(chuàng)建測試工程     

      在RealEvo-IDE中創(chuàng)建應(yīng)用工程,導(dǎo)入代碼demo.cpp、demo.h,并創(chuàng)建代碼文件server.cpp、client.cpp,內(nèi)容如程序清單 5.2所示。

                                                   程序清單 5.2 server.cpp和client.cpp

client.cpp#include #include using namespace demo;using namespace std;intmain(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;
}

server.cpp#include #include using namespace demo;using namespace std;class PrinterI : public printer {    public:        virtual void printerstr(const string & s,                const Ice::Current &);
};voidPrinterI::
printerstr(const string & s, const Ice::Current &)
{    cout << s << endl;
}intmain(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;
}

 

      應(yīng)用程序同樣使用專家模式,需創(chuàng)建server.mk和client.mk兩份Makefile文件。分別加入對(duì)應(yīng)的代碼,server.mk中編譯demo.cpp、server.cpp,client.mk中編譯demo.cpp、client.cpp。并依賴ICE庫。編譯生成兩份可執(zhí)行文件,server和client。在SylixOS設(shè)備上先后執(zhí)行server和client,若在執(zhí)行client時(shí)server出現(xiàn)“Hello World”信息表示client成功調(diào)用server接口,運(yùn)行結(jié)果正常。


本文題目:SylixOS移植ICE庫總結(jié)
本文網(wǎng)址:http://weahome.cn/article/jgghid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部