當前位置:編程學習大全網 - 編程語言 - ace怎麽編譯

ace怎麽編譯

ACE是個很有用的開放源代碼的C++網絡編程開發包,利用它比直接用API更有利於代碼的健壯性,可移植性,並相對簡單。

估計大家剛接觸ACE時,都有壹定難度,說不定就半途放棄了,這是我學ACE兩天中的總結,基本上不成文,但我想研究到ACE的妳壹定會明白下文的意思。

壹、ACE官方主頁: mand require ...“,點”是“

會出現以下錯誤

如果有“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、無法找到動態鏈接庫aced.dll於指定的路徑

為系統變量PATH加上D:\ACE_wrappers\bin

靜態包含:

工程-設置-C/C++-預處理程序定義中加入 ,ACE_AS_STATIC_LIBS

例1server編譯後生成

server.exe 16K serverd.exe 97K servers.exe 124K serversd.exe 669K

(servers.exe較適合發布)

例2 client編譯後生成

client.exe 16K clientd.exe 97K clients.exe 124K clientsd.exe 669K

(clients.exe較適合發布)

測試 clients 127.0.0.1 1919

servers 1919

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

發表於: 3/31/2003 - 04:24

翻譯的壹點小東西,希望能對大家有幫助。

其實也不敢稱為是翻譯的,水平太爛了,大家將就著看吧 :)

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

註意:關於MSVC5.0和Service Pack 3的使用有壹些問題,過去壹些用戶在sp2中使用良好的代碼在sp3種卻會引發壹些問題。感謝Bill 的細心查找,這壹神秘的問題被解決了。答案?(哦,這兒有壹個好答案。。。)這可能是因為有多個版本的sp3較早版本的sp3有壹些bug,而後來的版本修正了這些錯誤,從微軟網站上下載的1998年6月16日版本的sp3是壹個良好的版本。如果X03-50158是那些擁有sp3的光盤序列號的壹部分,那麽這些版本也是良好的。但是不管任何版本的sp3,其STL的實現都有錯誤,詳細情況請瀏覽/vc_fixes.html。感謝Ben Eng對這些錯誤的修正。

現在的SP4(希望只有壹個版本)已經修正了STL中的死鎖問題。

我們現在將不再積極的支持MSVC 4.X以及以前的版本,ACE可和這些編譯器壹起工作但是可能會丟失壹些好處。

1. 將ACE分發包界壓縮到壹個目錄中,這將在那個目錄中生成壹個包含ACE的目錄ACE_wrappers。接下來的步驟中假設ACE分發包被解壓縮到ACE_ROOT=C:\ACE_wrappers中,因此ACE將會存在於ACE_ROOT\ace目錄中。

2. 在ACE_ROOT\ace目錄中創建壹個文件,命名為config.h,其內容為:

#include "ace/config-win32.h"

3. 在VC++中加載ACE的工程文件(ACE_ROOT\ace\ace.dsw)

4. 每個工程都會包含多個配置,這些配置是Debug/Release, MFC/Non-MFCh和Static/Dynamic庫版本等選項的混合。確定妳所需要的構造(例如,調試代碼需要ACE的調試版本)。所有這些不同的配置可以為妳提供壹些便利,妳可以或者采用不同的模式以構造不同配置的應用,或者通過改變ace\config.h來改變在NT上的不同配置。

註意:如果妳使用動態連接,請保證ACE_ROOT\bin被添加到妳的path環境變量中,否則妳將在運行程序的時候碰到尋找ace.dll或者aced.dll的問題。

5. 如果妳在Windows NT或者Windows 2k上構建ACE,妳可以馬上開始構造她而不需任何改變,如果妳在Windows 9x/me上構建,那麽妳必須在

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運行時的動態DLL版本,妳也可以選擇使用ACE的不關心運行時庫的靜態(LIB)版本。我們選擇僅與動態運行時庫連接的原因在於基本上所有的NT機器上都會安裝這些庫,而我們則可以因此而減小代碼的大小。如果妳希望ACE與MFC的靜態版本連接,則可以在config.h中定義ACE_USES_STATIC_MFC。然而,如果妳希望靜態的連接所有的庫(包括MSVC運行時庫),就需要自己修改工程文件了。

8. 如果要構建ACE的靜態版本,則需要在config.h中定義ACE_AS_STATIC_LIBS,此宏在那些希望使用ACE的靜態版本的應用工程中也必須定義。

作為壹個可選項,妳可以在

#include statement in ACE_ROOT\ace\config.h.之前添加壹行:

#define ACE_NO_INLINE

來取消函數內聯從而減小靜態庫(和妳的運行碼)的大小。

9. ACE DLL和LIB庫的命名規則:

我們使用如下的規則明明使用MSVC的ACE的DLL和LIB文件。

"Library/DLL name" + (是靜態庫嗎 ? "s" : "") + (包含調試信息 ? "d" : "") + {".dll"|".lib"}

在MSVC環境中使用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。如果妳英文程度還可以的話,最好直接閱讀這兩篇文檔。說到底,中文文檔只是“權宜之計”;漢語並不太適合進行邏輯性的表述。

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

ACE的編譯與安裝

壹般規則

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

但是,如果妳想要取消/重定義在針對特定平臺的配置文件中定義的宏,#undef應該在配置文件之後出現。

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

步驟:

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

2. 在ACE_ROOT\ace目錄中創建壹個名為config.h的文件,在其中包含:

#include “ace/config-win32.h”

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

4. 其中的每個項目都含有若幹不同的配置(可混合Debug/Release、MFC/Non-MFC、Static/Dynamic library版本)。妳可以從中選擇妳所需的配置,或是使用ace/config.h來進行調整。

註意:如果妳使用動態鏈接庫,在運行使用ACE的程序時,確定妳在PATH中包括了ACE_ROOT\bin。

5. 如果妳的系統平臺是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作為靜態庫鏈接進ACE,妳可以在config.h文件中定義ACE_USES_STATIC_MFC。但如果妳想要靜態鏈接所有的東西(包括MSVC運行時庫),妳就需要自己修改ACE的項目文件。

8. ACE的靜態版本是通過定義ACE_AS_STATIC_LIBS來編譯的。在鏈接靜態ACE庫的應用項目中也應該使用這個宏。

妳也可以在config.h文件中增加

#define ACE_NO_INLINE

來取消函數內聯並減小靜態庫(和妳的可執行程序)的大小。

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

"Library/DLL名" + (是否為靜態庫 ? "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環境變量。例如:

set ACE_ROOT=C:\ACE_wrappers

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

1.確定ACE已經編譯和安裝。

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服務庫,以及壹些單獨的可執行程序(比如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

加入以下內容:

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 到系統環境變量 path中

三.設置系統變量

ACE_ROOT=C:\ACE_wrappers

TAO_ROOT=C:\ACE_wrappers\TAO

  • 上一篇:中文版Google SketchUp Pro 8.0完全自學教程的內容簡介
  • 下一篇:天才少年申怡飛:15歲上大學,21歲讀博,5G技術核心研發者
  • copyright 2024編程學習大全網