• <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 閱讀(2183) 評(píng)論(0)  編輯 收藏 引用 所屬分類: reprinting

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

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

            二、解壓縮后放在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、從菜單上選擇“編譯”,“放置可遠(yuǎn)行配置”,選擇你需要的工程配置
                    “編譯”,“重建全部”(或任一,如ACE DLL - Win32 MFC Debug)
                    此過程可能持續(xù)半小時(shí)至一個(gè)小時(shí)不等
                或2、從菜單上選擇“編譯”,“批構(gòu)建”,選擇你需要的工程配置
                    此過程可能持續(xù)二至四個(gè)鐘頭
                   
                產(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)頁(yè)上的原代碼復(fù)制到一新建文件,并命名為server.cpp
                用VC打開,編譯,重建全部,彈出對(duì)話框,“This build command require ...“,點(diǎn)”是“
               
                會(huì)出現(xiàn)以下錯(cuò)誤
               
                如果有“Cannot open include file: 'ace/SOCK_Acceptor.h': No such file or directory”
                工程-設(shè)置-C/C++: Preprocessor,附加包含路徑:D:/ACE_wrappers
               
                如果有“ You must link against multi-threaded libraries when using ACE (check your project settings)”
                工程-設(shè)置-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”
                工程-設(shè)置-Link-Input: 對(duì)象/庫(kù)模塊:添加aced.lib                         附加庫(kù)路徑: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 : '?'
                    錯(cuò)誤在這一句:  ACE_DEBUG((LM_DEBUG,?Usage egX <hostname> <port_number>\n?));
                    將?改為"
                   
                4、無法找到動(dòng)態(tài)鏈接庫(kù)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ā)布)
               
                測(cè)試 clients 127.0.0.1 1919
                    servers 1919


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

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

            使用Microsoft Visual C++ 在win32平臺(tái)上生成和安裝ACE:

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

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

            ACE的編譯與安裝

            一般規(guī)則

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

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

            如果你計(jì)劃在多種平臺(tái)上編譯ACE,你也許需要考慮克隆源碼樹。

            步驟:

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

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

            #include “ace/config-win32.h”

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

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

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

            #define ACE_HAS_WINNT4 0

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

            #define ACE_HAS_STANDARD_CPP_LIBRARY 1

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

            #define ACE_HAS_MFC 1

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

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

            #define ACE_NO_INLINE

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

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

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

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

            ACE測(cè)試

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

            TAO的編譯與安裝

            確定VC的CL.EXE在你的訪問路徑上。設(shè)置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編譯器就需要進(jìn)行此設(shè)置。

            3.加載tao\TAO.dsw,并編譯TAO庫(kù)。

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

            TAOACE.dsw

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

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

            祝學(xué)有所成!

            馬維達(dá)

            -------------------------------------
            將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中

            三.設(shè)置系統(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

            97久久久精品综合88久久| 久久精品国产亚洲一区二区| 日韩影院久久| 久久久无码精品亚洲日韩京东传媒| 久久精品免费一区二区| 日韩欧美亚洲综合久久影院d3| 久久www免费人成精品香蕉| 久久亚洲日韩看片无码| 99国产精品久久| 久久综合鬼色88久久精品综合自在自线噜噜 | 国内精品久久久久久久久电影网| 久久精品天天中文字幕人妻| 国产高潮久久免费观看| 亚洲国产精品无码久久| 美女久久久久久| 51久久夜色精品国产| 人妻无码中文久久久久专区| 亚洲国产精品综合久久网络| 久久久中文字幕| 97精品伊人久久大香线蕉app| 午夜精品久久久久久| 日韩一区二区久久久久久| 日产精品久久久久久久| 久久这里只有精品首页| 伊人久久大香线蕉AV一区二区| 久久99国产精品二区不卡| 久久久精品国产sm调教网站| 国内精品久久久久影院老司| 久久久精品久久久久特色影视| 久久国产精品-久久精品| 午夜精品久久久久久中宇| 精品伊人久久大线蕉色首页| 久久国产欧美日韩精品免费| 性做久久久久久久久老女人| 精品久久久久久无码中文野结衣| 2021久久精品国产99国产精品| 色欲久久久天天天综合网| 亚洲国产精品无码久久一线| 久久久久久久久久久久中文字幕| 久久人人爽人人爽人人片av高请| 97热久久免费频精品99|