老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

SylixOS移植ICE庫總結-創新互聯

1 ICE 簡介

     ICE(Internet Communications Engine)是一種面向對象的中間件平臺,主要用于網絡通訊。它為面向對象的“客戶端-服務器”模型的應用提供了一組很好的工具和API接口。目前在全世界被應用于很多項目之中。ICE中間件號稱標準統一,開源,跨平臺,跨語言,分布式,安全,服務透明,負載均衡,面向對象,性能優越,防火期穿透,通訊屏蔽。因此相比Corba,DCOM,SOAP,J2EE等的中間件技術,自然是集眾多優點于一身,而卻沒有他們的缺點。

成都創新互聯主營白堿灘網站建設的網絡公司,主營網站建設方案,成都App制作,白堿灘h5重慶小程序開發搭建,白堿灘網站營銷推廣歡迎白堿灘等地區企業咨詢

 
2 資源獲取

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

SylixOS移植ICE庫總結

                                                       圖2.1 Ice源碼解壓后的文件

     cpp/、csharp/、java/、js/、objective-c/、php/、python/等目錄包含了對應語言的Ice庫實現代碼,config/目錄中存放控制編譯方式的相關配置文件,slice/中存放了slice相關工具的代碼實現。

 
3 Linux 平臺編譯

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

SylixOS移植ICE庫總結

                                                             圖 3.1 supported-languages屬性修改

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

 
4 移植工作

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

 
4.1 工程創建

     在Real-Evo IDE中創建libIce的動態庫工程。創建時選中C++工程選項并打開專家模式,如圖 4.1所示。

SylixOS移植ICE庫總結

                                   圖 4.1 創建工程選項

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

SylixOS移植ICE庫總結

                     圖 4.2 Ice代碼目錄結構

 
4.2 配置libIce.mk

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

SylixOS移植ICE庫總結

                               圖 4.3 添加cpp文件

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

SylixOS移植ICE庫總結

                       圖 4.4 頭文件搜索路徑

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

SylixOS移植ICE庫總結

                            圖 4.5 添加宏配置

     添加編譯選項,如圖 4.6所示。

SylixOS移植ICE庫總結

                            圖 4.6 添加編譯選項

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

SylixOS移植ICE庫總結

                            圖 4.7 添加依賴庫

     打開C++編譯擴展,如圖 4.8所示。

SylixOS移植ICE庫總結

                            圖 4.8 打開C++編譯擴展

 
4.3 代碼修改

     默認編譯會出現若干編譯錯誤,需對部分代碼進行修改,具體修改內容如下:

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

SylixOS移植ICE庫總結

                          圖 4.9 修改獲取時間方式

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

SylixOS移植ICE庫總結

                          圖 4.10 DSP大小端配置

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

SylixOS移植ICE庫總結

                         圖 4.11 interrupt符號沖突

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

SylixOS移植ICE庫總結

                       圖 4.12消除GNUC版本錯誤

   修改src/ice-master/cpp/src/Ice/DynamicLibrary.cpp,DSP中刪除動態庫相關操作,如圖 4.13所示。

SylixOS移植ICE庫總結

SylixOS移植ICE庫總結

                         圖 4.13 DSP中刪除動態庫相關操作

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

SylixOS移植ICE庫總結

                        圖 4.14增加頭文件grp.h

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

SylixOS移植ICE庫總結

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

SylixOS移植ICE庫總結

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

SylixOS移植ICE庫總結

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

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

SylixOS移植ICE庫總結

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

SylixOS移植ICE庫總結

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

SylixOS移植ICE庫總結

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

SylixOS移植ICE庫總結

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

SylixOS移植ICE庫總結

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

   src/ice-master/cpp/src/Ice/Service.cpp,刪除fork調用相關代碼,如圖 4.23所示。

SylixOS移植ICE庫總結

                  圖 4.23刪除fork調用相關代碼

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

SylixOS移植ICE庫總結

                 圖 4.24糾正pthread_join返回值差異

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

SylixOS移植ICE庫總結

                 圖 4.25糾正pthread_mutex_trylock返回值差異

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

SylixOS移植ICE庫總結

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

 
5 ICE 基本使用

     ICE應用架構是服務器客戶端模式,包括服務端和客戶端兩部分代碼。客戶端和服務器代碼由slice工具所生成的接口代碼聯系到一起。下面使用ICE運行一個簡單的helloworld測試例程。

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

     可在當前目錄中生成接口代碼demo.cpp、demo.h。

 
5.2 創建測試工程    

     在RealEvo-IDE中創建應用工程,導入代碼demo.cpp、demo.h,并創建代碼文件server.cpp、client.cpp,內容如程序清單 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;
}

      應用程序同樣使用專家模式,需創建server.mk和client.mk兩份Makefile文件。分別加入對應的代碼,server.mk中編譯demo.cpp、server.cpp,client.mk中編譯demo.cpp、client.cpp。并依賴ICE庫。編譯生成兩份可執行文件,server和client。在SylixOS設備上先后執行server和client,若在執行client時server出現“Hello World”信息表示client成功調用server接口,運行結果正常。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


文章名稱:SylixOS移植ICE庫總結-創新互聯
標題來源:http://www.xueling.net.cn/article/copjdo.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 无码精品一区二区三区免费视频 | 久久久不卡网国产精品一区 | 亚洲精品wwwww| 久草高清在线 | 男人操女人视频在线观看 | 99一级片| 国产伦理精品 | 4438ⅹ亚洲全国最大色丁香 | 在线观看中文资源视频 | 成人在线手机版视频 | 日韩字幕在线观看 | 少妇aaa片 | 波多野结衣在线视频一区二区三区 | 欧美成人免费一区二区三区 | 97在线观 | 蜜臀一二三 | 精品久久久久久久中文字幕 | 日日碰日日摸日日澡视频播放 | 男人视频在线观看 | 成人在线观看免费网站 | 四虎成人精品永久免费av | 亚洲AV久久精品狠狠爱AV | 误杀2免费观看 | 日韩少妇激情一区二区 | 免费爆乳精品一区二区 | 国产精品影视在线观看 | 亚洲6080yy久久无码国产 | 樱花视频在线观看进击的巨人第三季 | 国内视频精品 | 日本道二区视频 | 一区三区在线观看 | 久久国产精品99国产精 | 欧美人与牲口杂交在线播放免费 | 少妇太爽了在线观看 | 国产综合在线观看 | 国产精品素人一区二区 | 精品久久久久久无码AV | 亚洲最大的av在线 | 麻豆最新网址 | 亚洲视频免费播放 | 大地资源中文在线观看免费 |