• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 60  文章 - 5  trackbacks - 0
            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            常用鏈接

            留言簿(2)

            隨筆分類(42)

            隨筆檔案(60)

            文章檔案(2)

            我收藏的博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            ACE的構(gòu)建(VC++6.0環(huán)境)
            Windows下ACE的構(gòu)建
            1. 將ACE-5.5.zip解壓到所需的安裝目錄,此處以E:\為例,解壓后形成ACE_wrappers文件夾,因此ACE將會存在于ACE_wrappers\ace目錄中。ACE_ROOT=E:\ACE_wrappers。
            2. 在系統(tǒng)中新建ACE_ROOT環(huán)境變量,值設(shè)為 E:\ACE_wrappers。具體設(shè)置為:我的電腦->屬性->高級->環(huán)境變量->新建
            3. 在E:\ACE_wrappers\ace目錄中創(chuàng)建一個(gè)頭文件,命名為config.h,其內(nèi)容為:
            #include "ace/config-win32.h"(必選項(xiàng))
            #define ACE_HAS_STANDARD_CPP_LIBRARY 1 (MSVC自帶的標(biāo)準(zhǔn)C++頭文件)
            #define ACE_HAS_MFC 1(與MFC一起使用)
            #define ACE_NO_INLINE(取消函數(shù)內(nèi)聯(lián)從而減小靜態(tài)庫和運(yùn)行碼的大小)
            #define ACE_AS_STATIC_LIBS(構(gòu)建ACE的靜態(tài)版本)
            #define ACE_HAS_WINNT4 0(在Windows 9x/me上構(gòu)建所需,在ACE中移掉一些WinNT/Win2K中特有的代碼)
            以上只需要添加前兩項(xiàng)就可以了。
            4. 在VC++中加載ACE的工程文件(ACE_ROOT \ace\ace.dsw),在release和debug兩種編譯方式下進(jìn)行編譯,得到相應(yīng)的庫文件(ACE.dll、ACE.lib 和 ACEd.dll、ACEd.lib),其中ACE.dll 、ACE.lib是由release版生成的,ACEd.dll、ACEd.lib是由debug版生成的。具體操作方法:運(yùn)行VC++,選擇Build ->Batch Build…,將ACE-Win32 Debug和ACE-Win32 Release全部選中,Rebuild All即可。如下圖所示:

            按照上面的方法可能只編譯出ACE.dll 、ACE.lib庫文件,具體原因還不詳。按照下面的操作方法進(jìn)行編譯可以成功生成全部庫文件。具體操作方法:Build->Set Active Configuration…分別選中ACE-Win32 Release進(jìn)行編譯即可。如下圖所示

            同樣打開ace_static.dsw編譯生成ACEs.lib、 ACEsd.lib、ACE_RMCasts.lib、ACE_RMCastsd.lib、TMCasts.lib、TMCastsd.lib

            5. 配置ACE環(huán)境。 打開VC++6.0,選擇Tools->Options->Directories 加入以下內(nèi)容:
            1) Executable File:E:\ACE_wrappers\bin
            2) Include File:E:\ACE_wrappers
            3) Library Files:E:\ACE_wrappers\lib
            4) Source Files:E:\ACE_wrappers
            在編寫程序時(shí)要在Project->Settings菜單中進(jìn)行如下設(shè)置:
            C/C++選項(xiàng)卡:
            Code Generation:選擇多線程版運(yùn)行時(shí)庫(Multithreaded DLL)。
            Preprocessor:在“Additional include directories”域中加入$ACE_ROOT。  
            Link選項(xiàng)卡:
            Input:在“Object/library modules”域中包含適當(dāng)?shù)腁CE庫文件,在“Additional library
            path”域中包含ACE庫鏈接文件的路徑。這通常是ACE_ROOT/ace。
            其中 DLL debug對應(yīng)ACEd.lib
                DLL release對應(yīng)ACE.lib
                Static library debug對應(yīng)ACEsd.lib
                Static library release對應(yīng)ACEs.lib
                MFC DLL debug對應(yīng)ACEmfcd.lib
                MFC DLL release對應(yīng)ACEmfc.lib
               主要用到以上兩個(gè)庫。

            6. 在系統(tǒng)環(huán)境的變量 path中加入E:\ACE_wrappers\bin,否則在運(yùn)行程序的時(shí)候碰到尋找ace.dll或者aced.dll的問題。
            7. 在MFC程序中使用時(shí),應(yīng)該在InitInstance()中添加:
            WSDATA wsData;
            WORD VerRequested = MAKEWORD (2, 2);
            WSAStarup (VerRequested, &wsData)
            注:可以在頭文件中加入如下代碼就不用再手動填加lib庫文件
            #ifdef _DEBUG
            #pragma comment (lib,"aced.lib")
            #else
            #pragma comment (lib,"ace.lib")
            #endif
            8. 在windows下release時(shí)有可能報(bào)錯(cuò),錯(cuò)誤如下:
            error C2039: 'TryEnterCriticalSection' : is not a member of '`global
            error C2065: 'TryEnterCriticalSection' : undeclared identifier
            解決辦法:
            工程 Project-->setting-->C/C++   寫入:_WIN32_WINNT=0x0500
            Linux 下ACE的構(gòu)建
            1. 設(shè)置環(huán)境變量ACE_ROOT,命令如下:
            “vi /etc/profile” ,在“export PATH USER….”后加入4行
            ? ACE_ROOT=/opt/ACE
            ? export ACE_ROOT
            ? LD_LIBRARY_PATH=$ACE_ROOT/aceLD_LIBRARY_PATH
            ? export LD_LIBRARY_PATH
            完 成后將/etc/profile執(zhí)行一次,命令:“chmod 555 /etc/profile”,“/etc/profile”。這樣我們的ACE_ROOT就設(shè)置好了,可以用如下命令查看ACE_ROOT是否設(shè)置好了: “echo $ACE_ROOT” ,這個(gè)時(shí)候最好reboot啟動一次linux。
            2. 解壓ACE.tar.gz包:
            不 要自己手工將ACE.tar.gz包完全解開,特別強(qiáng)調(diào)不要完全解開,后面可以看到安裝腳本會給我們解開它的;如果你手工解開全部,安裝腳本將會將你的解 壓縮目錄刪除的!我們要做的事就只是將ACE.tar.gz包中的ACE-install.sh安裝腳本單獨(dú)解出來,并對其修改。我們只要這一個(gè)文件就可 以。用mkdir建目錄,如/home/my/ACE,然后將你的ACE.tar.gz放在此目錄下(用cp命令拷貝或mv命令移動到此目錄)。注意這個(gè) 目錄將是你的一個(gè)存放ACE.tar.gz的目錄,安裝腳本會來這個(gè)目錄找這個(gè)文件的,這個(gè)目錄和ACE_ROOT是不一樣的,且ACE- install.sh也提示不要將這兩個(gè)目錄設(shè)置成同一個(gè)目錄。ACE_ROOT將是我們的安裝目標(biāo)目錄。
            3. 從ACE.tar.gz解壓出單個(gè)文件ACE-install.sh,命令如下:
            “tar –zxvf ACE+TAO+CIAO.tar.gz ACE_wrappers/ACE-install.sh”
            解 好后,會出來一個(gè)新的子目錄“ACE_wrappers”。此時(shí)可以先將ACE-install.sh移到外面的目錄來:“mv /ACE_wrappers/ACE-install.sh .” “.”代表當(dāng)前目錄。當(dāng)然ACE-install.sh在什么路徑下是沒什么影響的,因?yàn)槲覀円獙CE-install.sh的內(nèi)容進(jìn)行修改的,里面有 很多路徑要修改。現(xiàn)在在/home/my/ACE就有了ACE-install.sh,我們現(xiàn)在用vi對其進(jìn)行修改,修改前自己可以先備份一個(gè)。命令: “cp ACE-install.sh ACE-install.sh.bak”,“vi ACE-install.sh”先找到“MY_ACEDIR=${HOME}/aceconfig”,將其改成“MY_ACEDIR= /home/my/ACE”,就是改成我們自己建的、放有ACE.tar.gz文件的目錄,之后去掉前面的注釋“#”號。接著在下面一點(diǎn),找到 “MY_ACE_CONFIG=config-sunos5.4-sunc++-4.x.h”,將其修改成“MY_ACE_CONFIG=config- linux.h”,即改成linux下的配置文件。繼續(xù)改,找到“MY_ACE_GNU_MACROS=platform_sunos5_sunc++. GNU”,將其改成“MY_ACE_GNU_MACROS=platform_linux.GNU”。這個(gè)是各種操作系統(tǒng)平臺下的GNU宏文件設(shè)置。文件 修改完畢,保存退出“:wq”。
            4. 安裝ACE:
            此時(shí)應(yīng)該是在/home/my/ACE目錄下,我們執(zhí)行: h./ACE-install.sh
            此 后將是較長時(shí)間的解包、編譯等待時(shí)間。這個(gè)過程將不會出現(xiàn)任何錯(cuò)誤,因?yàn)榘惭b腳本將為我們做很多事情,如:生成config.h,生成 platform_macros.GNU。我們不需要按ACE-install.html中說的手工改東西:不用做連接“ln -s config-sunos5-sunc++-4.x.h config.h”,安裝腳本會給我們做好;(題外話:Windows中沒有文件連接這一說,所以要自己生成一個(gè)config.h文件,再在它的里面加一 句話“#include "ace/config-win32.h"”。)
            如果編譯中出現(xiàn)錯(cuò)誤,如“../apps/gperf”等,請編輯$ACE_ROOT/apps下的Makefile,將其中的有關(guān)“gperf”的部分注釋掉,這個(gè)東西只是一個(gè)例子,可以不去編譯它。
            強(qiáng)調(diào)一下,用ACE-install.sh來安裝,會編譯ACE、tests、apps等。最后會生成libACE.so及tests、apps下也會出來很多經(jīng)過編譯的文件。
            當(dāng)然如果你只是下載了ACE.tar.gz這樣的單個(gè)包來安裝,你可以手工改文件,再make,因?yàn)橹痪幾gACE,工作就少了很多,手工做還可以接受。
            ACE學(xué)習(xí)資料
            1. ACE 程序員指南:網(wǎng)絡(luò)與系統(tǒng)編程的實(shí)用設(shè)計(jì)模式 網(wǎng)絡(luò)與系統(tǒng)編程的實(shí)用設(shè)計(jì)模式   ACE Programmer's Guide practical Design Patterns for Network and Systems Programming
            (美)Stephen D. Huston,(美)James CE Johnson,(美)Umar Syyid著
            馬維達(dá) 譯 中國電力出版社
            2. C++網(wǎng)絡(luò)編程 卷1:運(yùn)用ACE和模式消除復(fù)雜性
            C++ Network Programming Volume 1 Mastering Complexity with ACE and Patterns
            [美]Douglas C.Schmidt,Stephen D.Huston /著 [美]Douglas C.Schmidt,Stephen D.Huston 著,於春景 譯   華中科技大學(xué)出版社
            3. C++網(wǎng)絡(luò)編程,卷2 基于ACE和框架的系統(tǒng)化復(fù)用
            C++ network Programming, Volume 2 Systematic Reuse with ACE and Frameworks
            Douglas C.Schmidt, Stephn D.Huston /著   | 馬維達(dá) 譯 電子工業(yè)出版社
            4. ACE的官方網(wǎng)站  http://www.cs.wustl.edu/~schmidt/ACE.html
            5. 馬維達(dá)的主頁 http://www.flyingdonkey.com/
            6. RIVERACE公司 http://www.riverace.com
            7. 灰狐          http://www.huihoo.com/
            8.     ACE類庫    http://dev.csdn.net/article/40/40700.shtm


            常見錯(cuò)誤
            錯(cuò)誤1:
            “Cannot open include file: ace/SOCK_Acceptor.h: No such file        or directory”
            解決方法:
            Project->settings->C/C++: Preprocessor的Additional include directories中加入$ACE_ROOT,如E:/ACE_wrappers
            錯(cuò)誤2:
            “You must link against multi-threaded libraries when using ACE (check your project settings)”
            解決方法:
            Project->settings->C/C++: Code Generation 的Use run-time library : Debug Multithreaded Dll
            錯(cuò)誤3:
            “error C2065: ACE_ERROR : undeclared identifier”
            “error C2065: ACE_DEBUG : undeclared identifier”
            解決方法:
            在原馬中加入#include ace/Log_Msg.h
            錯(cuò)誤4:“error C4716: ace_main_i : must return a value”
            解決方法:
            在main中加入return 0;
            錯(cuò)誤5:
            “error LNK2001: unresolved external symbol __declspec(dllimport) int __cdecl”
            解決方法:
            Project->settings->Link->Input: Object/library Modules加入aced.lib ,Additional Library Path中加入$ACE_ROOT\ace,如E:\ACE_wrappers\ace
            編譯client中遇到的問題:
            錯(cuò)誤6:
            error C2039: sprintf : is not a member of ACE_OS
            解決方法:#include ace/OS_NS_stdio.h
            錯(cuò)誤7:error C2039: strlen : is not a member of ACE_OS
            解決方法:#include ace/OS_NS_string.h
            錯(cuò)誤8:無法找到動態(tài)鏈接庫aced.dll于指定的路徑
            解決方法:為系統(tǒng)變量PATH加上D:\ACE_wrappers\bin
            靜態(tài)包含:
               工程-設(shè)置-C/C++-預(yù)處理程序定義中加入 ,ACE_AS_STATIC_LIBS
              
              
            例1server編譯后生成
            server.exe 16K   serverd.exe 97K     servers.exe 124K serversd.exe 669K
            (servers.exe較適合發(fā)布)

            例2 client編譯后生成
            client.exe 16K   clientd.exe 97K     clients.exe 124K clientsd.exe 669K
            (clients.exe較適合發(fā)布)

            測試 clients 127.0.0.1 1919
                   servers 1919


            如果編譯器支持64位,通過什么宏定義來區(qū)分64位還是32位阿?
            答:#define ver ((2>>31)>0?64:32)
            -------------------------------------------------------
            給ACE初哥初妹的話

            給ACE初哥初妹的話

            version 0.1.0 Stone jIang 2006-11-6

            下面列出了初學(xué)ACE必要的基礎(chǔ)知識,希望能給初學(xué)ACE的朋友們一點(diǎn)幫助。特加上版本號,這是為了歡迎批判,補(bǔ)充和修訂。

            1. C++/OOP (有一部分高手是C語言背景根深蒂固的,思考問題不是面向?qū)ο螅@類人學(xué)ACE需要先補(bǔ)補(bǔ)OOP思想)

            2. Design Pattern (ACE不僅僅是類庫,而是通過模式協(xié)同在一起的一系列相關(guān)的類,如果對設(shè)計(jì)模式熟悉,那么會用助于學(xué)習(xí)ACE)

            3. Framework (Framework應(yīng)該還不正式,相似的詞還可以是architecture,不管用啥詞語,所要指出的是,ACE不僅僅是類庫,更是通過模式組合在一 起相互協(xié)作的類形成的半成品。框架有別于類庫,后者通常是被動的被程序員寫的代碼調(diào)用,而框架則往往主動地調(diào)用用戶實(shí)現(xiàn)的接口,即著名的好萊塢原則—— Don't call me , I will call you)

            4.Linux(我是Linux初不者,但自從我開始進(jìn)入Linux 編程的時(shí)候,我就發(fā)現(xiàn),ACE許多精華源自Linux,以前對ACE理解有限,不知道為什么這樣,其實(shí)在Linux中能找到答案,ACE里閃爍著Linux的智慧。)

            5. Richard Stevens. (英年早逝的Richard,應(yīng)該是Douglas的良師益友,他的著作影響了Douglas,也就影響著ACE,這里要說的是TCP/IP Illustrated ,其實(shí)Richard其他著作,像APUE都是大滋大補(bǔ)的)

            6. 沒有6了。如果你認(rèn)為有,一定告訴我。

            posted on 2009-05-20 17:15 黃劍父 閱讀(535) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            一本色道久久88综合日韩精品| 久久精品中文字幕一区| 久久99精品久久久大学生| 久久久久久久综合狠狠综合| 亚洲国产精品高清久久久| 四虎国产精品免费久久5151 | 久久精品毛片免费观看| 国产精品成人无码久久久久久 | 久久强奷乱码老熟女网站| 亚洲AV无一区二区三区久久| 婷婷综合久久狠狠色99h| 久久久99精品一区二区| 国产成人精品久久免费动漫| 麻豆成人久久精品二区三区免费| 综合久久给合久久狠狠狠97色| 久久人人爽人人爽人人爽| 久久精品国产亚洲麻豆| 91精品国产综合久久久久久| 久久久无码精品午夜| 久久亚洲国产成人精品无码区| 一本久久综合亚洲鲁鲁五月天| 婷婷久久综合九色综合98| 亚洲日本va中文字幕久久| 99久久国产精品免费一区二区| 亚洲午夜久久久精品影院| 人妻少妇久久中文字幕| 一本大道久久东京热无码AV| 久久久精品一区二区三区| 亚洲国产另类久久久精品黑人 | 亚洲va久久久噜噜噜久久 | 99久久国产热无码精品免费 | 波多野结衣中文字幕久久| 亚洲AV日韩精品久久久久久| 少妇无套内谢久久久久| 久久久一本精品99久久精品88| 久久人人爽人人爽人人片AV东京热 | 久久久久国产精品麻豆AR影院| 亚洲国产成人久久综合一| 久久成人精品视频| 99久久久久| 久久久久女教师免费一区|