• <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>

            如何編譯,配置ACE

            Posted on 2006-02-23 19:53 heart in the world 閱讀(2184) 評論(0)  編輯 收藏 引用 所屬分類: reprinting

            ACE是個很有用的開放源代碼的C++網(wǎng)絡編程開發(fā)包,利用它比直接用API更有利于代碼的健壯性,可移植性,并相對簡單。
            估計大家剛接觸ACE時,都有一定難度,說不定就半途放棄了,這是我學ACE兩天中的總結(jié),基本上不成文,但我想研究到ACE的你一定會明白下文的意思。

            一、ACE官方主頁:http://www.cs.wustl.edu/~schmidt/ACE.html
                下載地址:http://deuce.doc.wustl.edu/Download.html
               
                我下載的是Latest Beta Kit中的ACE.zip(Latest Release中的壓縮包好像有問題,我有WinRAR3.30解壓縮報錯)

            二、解壓縮后放在D盤
                D:\ACE_wrappers

            三、在D:\ACE_wrappers\ace目錄下新建文件config.h加入一行
                #include "ace/config-win32.h"
               
            四、編譯:用VC6.0打開D:\ACE_wrappers\ace\ace.dsw
                左側(cè)顯示    ACE DLL classes
                           ACE LIB classes
                或1、從菜單上選擇“編譯”,“放置可遠行配置”,選擇你需要的工程配置
                    “編譯”,“重建全部”(或任一,如ACE DLL - Win32 MFC Debug)
                    此過程可能持續(xù)半小時至一個小時不等
                或2、從菜單上選擇“編譯”,“批構(gòu)建”,選擇你需要的工程配置
                    此過程可能持續(xù)二至四個鐘頭
                   
                產(chǎn)生的.lib文件位于D:\ACE_wrappers\ace\下,
                產(chǎn)生的.dll文件位于D:\ACE_wrappers\bin\下
               
               
                同樣打開ace_static.dsw
                編譯
                ACEs.lib
                ACEsd.lib
                ACE_RMCasts.lib
                ACE_RMCastsd.lib
                TMCasts.lib
                TMCastsd.lib

                ACE生成的dll和lib文件的命名規(guī)則:(d = debug,s = static)

                debug - aced.lib、debug+static - acesd.lib、release - ace.lib、 release+static - aces.lib


            五、樣例程序的編譯
                用VC打開D:\ACE_wrappers\tests\tests.dsw
                “編譯”,“批構(gòu)建”
               
            六、自寫程序的工程配置
               
                中篇:ACE程序員教程.pdf中的樣例程序:
                網(wǎng)址:http://www.cs.wustl.edu/~schmidt/ACE_wrappers/docs/tutorials/guide-tutorials.html
               
                將網(wǎng)頁上的原代碼復制到一新建文件,并命名為server.cpp
                用VC打開,編譯,重建全部,彈出對話框,“This build command require ...“,點”是“
               
                會出現(xiàn)以下錯誤
               
                如果有“Cannot open include file: 'ace/SOCK_Acceptor.h': No such file or directory”
                工程-設置-C/C++: Preprocessor,附加包含路徑:D:/ACE_wrappers
               
                如果有“ You must link against multi-threaded libraries when using ACE (check your project settings)”
                工程-設置-C/C++: Code Generation - Use run-time library : Debug Multithreaded Dll
               
                如果有“error C2065: 'ACE_ERROR' : undeclared identifier”
                        error C2065: 'ACE_DEBUG' : undeclared identifier
                #include "ace/Log_Msg.h"

                error C4716: 'ace_main_i' : must return a value
                    在main中加入
                        return 0;
               
                “error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl”
                工程-設置-Link-Input: 對象/庫模塊:添加aced.lib                         附加庫路徑:D:\ACE_wrappers\ace
                                   
               
                                   
                編譯client中遇到的問題
                1、error C2039: 'sprintf' : is not a member of 'ACE_OS'
                   
                    #include "ace/OS_NS_stdio.h"
                   
                2、error C2039: 'strlen' : is not a member of 'ACE_OS'
               
                    #include "ace/OS_NS_string.h"
                3、error C2059: syntax error : '?'
                    錯誤在這一句:  ACE_DEBUG((LM_DEBUG,?Usage egX <hostname> <port_number>\n?));
                    將?改為"
                   
                4、無法找到動態(tài)鏈接庫aced.dll于指定的路徑
                    為系統(tǒng)變量PATH加上D:\ACE_wrappers\bin
                        
                靜態(tài)包含:
                   工程-設置-C/C++-預處理程序定義中加入 ,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


            下面是馬維達老師寫的:(轉(zhuǎn)自huihoo)

            發(fā)表于: 3/31/2003 - 04:24
            翻譯的一點小東西,希望能對大家有幫助。
            其實也不敢稱為是翻譯的,水平太爛了,大家將就著看吧 :)

            使用Microsoft Visual C++ 在win32平臺上生成和安裝ACE:

            注意:關(guān)于MSVC5.0和Service Pack 3的使用有一些問題,過去一些用戶在sp2中使用良好的代碼在sp3種卻會引發(fā)一些問題。感謝Bill 的細心查找,這一神秘的問題被解決了。答案?(哦,這兒有一個好答案。。。)這可能是因為有多個版本的sp3較早版本的sp3有一些bug,而后來的版本修正了這些錯誤,從微軟網(wǎng)站上下載的1998年6月16日版本的sp3是一個良好的版本。如果X03-50158是那些擁有sp3的光盤序列號的一部分,那么這些版本也是良好的。但是不管任何版本的sp3,其STL的實現(xiàn)都有錯誤,詳細情況請瀏覽http://www.dinkumware.com/vc_fixes.html。感謝Ben Eng對這些錯誤的修正。
            現(xiàn)在的SP4(希望只有一個版本)已經(jīng)修正了STL中的死鎖問題。
            我們現(xiàn)在將不再積極的支持MSVC 4.X以及以前的版本,ACE可和這些編譯器一起工作但是可能會丟失一些好處。
            1. 將ACE分發(fā)包界壓縮到一個目錄中,這將在那個目錄中生成一個包含ACE的目錄ACE_wrappers。接下來的步驟中假設ACE分發(fā)包被解壓縮到ACE_ROOT=C:\ACE_wrappers中,因此ACE將會存在于ACE_ROOT\ace目錄中。
            2. 在ACE_ROOT\ace目錄中創(chuàng)建一個文件,命名為config.h,其內(nèi)容為:
            #include "ace/config-win32.h"
            3. 在VC++中加載ACE的工程文件(ACE_ROOT\ace\ace.dsw)
            4. 每個工程都會包含多個配置,這些配置是Debug/Release, MFC/Non-MFCh和Static/Dynamic庫版本等選項的混合。確定你所需要的構(gòu)造(例如,調(diào)試代碼需要ACE的調(diào)試版本)。所有這些不同的配置可以為你提供一些便利,你可以或者采用不同的模式以構(gòu)造不同配置的應用,或者通過改變ace\config.h來改變在NT上的不同配置。
            注意:如果你使用動態(tài)連接,請保證ACE_ROOT\bin被添加到你的path環(huán)境變量中,否則你將在運行程序的時候碰到尋找ace.dll或者aced.dll的問題。
            5. 如果你在Windows NT或者Windows 2k上構(gòu)建ACE,你可以馬上開始構(gòu)造她而不需任何改變,如果你在Windows 9x/me上構(gòu)建,那么你必須在
            ACE_ROOT\ace\config.h.的#include塊之前添加一行:
            #define ACE_HAS_WINNT4 0
            這將在ACE中移掉一些WinNT/Win2K中特有的代碼。
            6. 如果你希望使用MSVC自帶的標準C++頭文件(C++ Standard Draft 2種定義的iostream,cstdio…..),則應該在
            ACE_ROOT\ace\config.h.的#include塊之前添加一行:
            #define ACE_HAS_STANDARD_CPP_LIBRARY 1
            7. 如果需要和MFC一起使用,增加如下定義到你的config.h文件中,注意,如果你想使用spawn一個新的線程,則必須保證使用THR_USE_AFX標志來spawn線程。
            #define ACE_HAS_MFC 1
            缺省的,ACE工程使用MSVC運行時的動態(tài)DLL版本,你也可以選擇使用ACE的不關(guān)心運行時庫的靜態(tài)(LIB)版本。我們選擇僅與動態(tài)運行時庫連接的原因在于基本上所有的NT機器上都會安裝這些庫,而我們則可以因此而減小代碼的大小。如果你希望ACE與MFC的靜態(tài)版本連接,則可以在config.h中定義ACE_USES_STATIC_MFC。然而,如果你希望靜態(tài)的連接所有的庫(包括MSVC運行時庫),就需要自己修改工程文件了。
            8. 如果要構(gòu)建ACE的靜態(tài)版本,則需要在config.h中定義ACE_AS_STATIC_LIBS,此宏在那些希望使用ACE的靜態(tài)版本的應用工程中也必須定義。
            作為一個可選項,你可以在
            #include statement in ACE_ROOT\ace\config.h.之前添加一行:
            #define ACE_NO_INLINE
            來取消函數(shù)內(nèi)聯(lián)從而減小靜態(tài)庫(和你的運行碼)的大小。
            9. ACE DLL和LIB庫的命名規(guī)則:
            我們使用如下的規(guī)則明明使用MSVC的ACE的DLL和LIB文件。
            "Library/DLL name" + (是靜態(tài)庫嗎 ? "s" : "") + (包含調(diào)試信息 ? "d" : "") + {".dll"|".lib"}
            在MSVC環(huán)境中使用ACE的更多信息可以在這里找到。



            -----------------------------------------------------------------------
            一、安裝TAO,需要先編譯并安裝ACE。

            二、ACE的編譯和安裝步驟見http://www.cs.wustl.edu/~schmidt/ACE_wrappers/ACE-INSTALL.html。TAO的編譯和安裝步驟見http://www.cs.wustl.edu/~schmidt/ACE_wrappers/TAO/TAO-INSTALL.html。如果你英文程度還可以的話,最好直接閱讀這兩篇文檔。說到底,中文文檔只是“權(quán)宜之計”;漢語并不太適合進行邏輯性的表述。

            但我還是把其中的一些段落編譯如下(VC 6.0 + ACE-5.2.1 + TAO-1.2.1):

            ACE的編譯與安裝

            一般規(guī)則

            ACE中的許多特性可以通過在$ACE_ROOT/ace/config.h中定義一些宏來進行修改。這些宏應該總是在包括針對你的平臺的配置文件之前出現(xiàn)。

            但是,如果你想要取消/重定義在針對特定平臺的配置文件中定義的宏,#undef應該在配置文件之后出現(xiàn)。

            如果你計劃在多種平臺上編譯ACE,你也許需要考慮克隆源碼樹。

            步驟:

            1. 將ACE發(fā)布文件解壓縮到某個目錄中,在其中將會創(chuàng)建含有所有文件的ACE_wrappers目錄。在下面的步驟中,ACE_wrappers目錄將以ACE_ROOT為名來指稱。

            2. 在ACE_ROOT\ace目錄中創(chuàng)建一個名為config.h的文件,在其中包含:

            #include “ace/config-win32.h”

            3. 現(xiàn)在加載ACE的項目文件(ACE_ROOT\ace\ace.dsw)。

            4. 其中的每個項目都含有若干不同的配置(可混合Debug/Release、MFC/Non-MFC、Static/Dynamic library版本)。你可以從中選擇你所需的配置,或是使用ace/config.h來進行調(diào)整。
            注意:如果你使用動態(tài)鏈接庫,在運行使用ACE的程序時,確定你在PATH中包括了ACE_ROOT\bin。

            5. 如果你的系統(tǒng)平臺是WinNT或2000,那么無需任何改動你就可以開始編譯了。如果是Windows 9x/Me,你需要在ACE_ROOT\ace\config.h中的#include語句之前增加:

            #define ACE_HAS_WINNT4 0

            6. 如果你想要使用MSVC標準C++頭(iostream、cstdio……),在ACE_ROOT\ace\config.h中的#include語句之前增加:

            #define ACE_HAS_STANDARD_CPP_LIBRARY 1

            7. 要與MFC一起使用ACE,再增加下面的定義:

            #define ACE_HAS_MFC 1

            注意如果你想要通過CWinThread派生新線程,一定要設置THR_USE_AFX。在缺省情況下,所有的ACE項目都使用DLL版本的MSVC運行時庫。盡管如此,你仍然可以選擇使用static(LIB)版本的ACE庫。如果你想要將MFC作為靜態(tài)庫鏈接進ACE,你可以在config.h文件中定義ACE_USES_STATIC_MFC。但如果你想要靜態(tài)鏈接所有的東西(包括MSVC運行時庫),你就需要自己修改ACE的項目文件。

            8. ACE的靜態(tài)版本是通過定義ACE_AS_STATIC_LIBS來編譯的。在鏈接靜態(tài)ACE庫的應用項目中也應該使用這個宏。
            你也可以在config.h文件中增加

            #define ACE_NO_INLINE

            來取消函數(shù)內(nèi)聯(lián)并減小靜態(tài)庫(和你的可執(zhí)行程序)的大小。

            9. ACE DLL和LIB的命名方案:

            "Library/DLL名" + (是否為靜態(tài)庫 ? "s" : "") + (是否啟用了Debugging ? "d" : "") + {".dll"|".lib"}

            10. 配置完畢后編譯即可。選擇dll版本,編譯生成的dll文件在ACE_ROOT\bin中,相應的lib文件在ACE_ROOT\ace中。

            ACE測試

            各測試程序在ACE_ROOT\tests中。在其中也有一個工作空間文件可用來編譯所有的測試程序(tests.dsw)。
            一旦你編譯了所有測試程序(可使用批編譯),你可以運行tests目錄中的perl腳本run_test.pl或批處理文件run_tests.bat來進行所有測試。

            TAO的編譯與安裝

            確定VC的CL.EXE在你的訪問路徑上。設置ACE_ROOT或TAO_ROOT環(huán)境變量。例如:

            set ACE_ROOT=C:\ACE_wrappers

            TAO最好放置在ACE_wrappers(這也是缺省情況)。

            1.確定ACE已經(jīng)編譯和安裝。

            2.確定ACE_wrappers\bin已在“Tools|Options”中的“Executable Directories”中列出。如果在MSVC下使用TAO_IDL編譯器就需要進行此設置。

            3.加載tao\TAO.dsw,并編譯TAO庫。

            4.要編譯Cubit測試,加載performance-tests\Cubit\TAO\IDL_Cubit\IDL_Cubit.dsw,并編譯客戶和服務器。

            TAOACE.dsw

            TAOACE.dsw是一個Visual C++ 5.0/6.0工作空間文件,它加載的項目包括ACE、TAO、TAO_IDL(編譯器)、gperf、orb服務庫,以及一些單獨的可執(zhí)行程序(比如Naming Service,等等)。它可以用于編譯所有的用于編譯/運行TAO應用的文件。

            三、我選擇編譯的是dll版本(Release),并在ACE的config.h文件中定義了“#define ACE_HAS_STANDARD_CPP_LIBRARY 1”。編譯后我所得到的ace.dll的大小是1.13MB,相應的ace.lib的大小是1.77MB;TAO.dll的大小是1.47MB,相應的TAO.lib的大小是2.74MB。所有文件約有 MB,包括源程序、編譯生成的中間文件,等等,但有些例子及服務我沒有編譯。

            祝學有所成!

            馬維達

            -------------------------------------
            將ACE與VC6集成在一起

            一.打開 Tools>Options>Directories
            加入以下內(nèi)容:
            Executable File:
            C:\ACE_wrappers\bin

            Include File:
            C:\ACE_wrappers\
            C:\ACE_wrappers\TAO
            C:\ACE_wrappers\TAO\orbsvcs

            Library Files:
            C:\ACE_wrappers\ace
            C:\ACE_wrappers\TAO\tao
            C:\ACE_wrappers\TAO\orbsvcs\orbsvcs

            Source Files:
            C:\ACE_wrappers\ace
            C:\ACE_wrappers\TAO\tao
            C:\ACE_wrappers\TAO\orbsvcs\orbsvcs

            二.加入 C:\ACE_wrappers\bin 到系統(tǒng)環(huán)境變量 path中

            三.設置系統(tǒng)變量
            ACE_ROOT=C:\ACE_wrappers
            TAO_ROOT=C:\ACE_wrappers\TAO

            posts - 4, comments - 8, trackbacks - 0, articles - 2

            Copyright © heart in the world

            伊人色综合久久天天人手人婷| 国产一级做a爰片久久毛片| 国产亚洲精久久久久久无码AV| 97精品伊人久久大香线蕉| 国产精品久久久福利| 精品国产99久久久久久麻豆| 久久免费国产精品| 国产成人精品久久综合| 狠狠色丁香婷婷久久综合不卡| 国产农村妇女毛片精品久久| 亚洲级αV无码毛片久久精品| 无码任你躁久久久久久老妇| 久久九九青青国产精品| 久久九九有精品国产23百花影院| 久久久噜噜噜久久| 99精品久久精品一区二区| 中文字幕无码av激情不卡久久| 亚洲а∨天堂久久精品| 2021久久国自产拍精品| 久久青青色综合| 99久久99久久精品国产片果冻| 国产成人精品久久亚洲高清不卡| 久久精品国产乱子伦| 久久久中文字幕日本| 国产成人综合久久久久久| 97超级碰碰碰久久久久| 色妞色综合久久夜夜| 国产一久久香蕉国产线看观看| 国内精品伊人久久久久777| 久久一区二区三区99| 久久综合成人网| 免费精品久久久久久中文字幕| 久久综合伊人77777麻豆| 国产免费久久精品丫丫| 久久精品成人免费国产片小草| 四虎国产精品成人免费久久| 久久人妻少妇嫩草AV无码蜜桃| 久久无码AV中文出轨人妻| 亚洲国产高清精品线久久| 色天使久久综合网天天| 亚洲伊人久久综合影院|