在VS6上編譯ACE的方法
1.下載最新的ACE Release版本壓縮包,解壓后目錄為: ACE-版本號\ACE_wrappers\
2.加載工程文件,目錄: ACE_wrappers\ace\ace.dsw
3.新建 config.h 文件到 ACE_wrappers\ace目錄下
4.添加包含頭文件聲明: #include "ace/config-win32.h"
5.添加宏定義 (注意:添加在 #include 之前)
?(1).#define ACE_HAS_WINNT4 0? //OS不是NT4.0或以后版本
?(2).#define ACE_HAS_STANDARD_CPP_LIBRARY 1? //使用標(biāo)準(zhǔn)C++庫
?(3).#define ACE_HAS_MFC 1????????? //使用MFC庫
?(4).#define THR_USE_AFX 1????????? //使用CWinThread產(chǎn)生新的線程類
?(5).#define ACE_USES_STATIC_MFC? 1 //靜態(tài)連接MFC庫
?(6).#define ACE_AS_STATIC_LIBS?? 1 //生成靜態(tài)的ACE庫
?(7).#define ACE_NO_INLINE????????? //是否使用內(nèi)聯(lián)函數(shù)在靜態(tài)庫內(nèi)
6.編譯得到.lib和.dll文件
好象使用時有個問題,不知道大家有沒有碰到過:
1. 在使用ACE發(fā)布Release版本程序時,
TryEnterCriticalSection導(dǎo)致無法編譯的問題
解決方法:
? (1). 工程 Project-->setting-->C/C++? 寫入:_WIN32_WINNT=0x0500
? (2).包含頭文件為:windows.h
?
如果有“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: 對象/庫模塊:添加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)包含:
?? 工程-設(shè)置-C/C++-預(yù)處理程序定義中加入 ,ACE_AS_STATIC_LIBS
??
*********************************************************************************
在Linux系統(tǒng)中安裝和配置ACE
準(zhǔn)備工作:
1.確保你的Linux操作系統(tǒng)的開發(fā)環(huán)境(gcc、make……)是完整且可用的。
2.在安裝ACE的過程中,可能需要root權(quán)限,因此確保你擁有root帳戶的密碼。
3.對于典型的Redhat9系統(tǒng),autoconf程序的版本可能過低,你需要首先升級它。
?? 升級的步驟如下:
在控制臺中輸入 autoconf -V,查看你的autoconf程序的版本
如果低于2.57g,你需要到
http://www.gnu.org/software/autoconf/
去下載最新版本的autoconf程序,目前autoconf程序的版本是2.59
根據(jù)tarball中的安裝說明,編譯并安裝升級autoconf程序
開始安裝:
經(jīng)過上面的準(zhǔn)備工作,現(xiàn)在你已經(jīng)具備了安裝ACE的條件。下面開始正式的安裝工作。
首先確定ACE的安裝路徑,并建立相應(yīng)的目錄。
這里,我們把ACE安裝在/home/zhc/ace/的目錄下,先執(zhí)行
mkdir /home/zhc/ace
然后將獲得的ACE源代碼包解至該目錄下。
tar zxvf ACE-5.4.tar.gz /home/zhc/ace
這時,在ace的目錄下會建立一個名為ACE_wrappers的子目錄,ACE所有的源代碼、工具、和例子都在這個目錄中。
先進(jìn)入該目錄,執(zhí)行
cd /home/zhc/ace/ACE_wrappers
然后建立一個子目錄,用于存放ACE編譯后的目標(biāo)文件
mkdir build
cd build
接著,執(zhí)行configure腳本,檢查你的系統(tǒng)環(huán)境,配置并生成適合你的系統(tǒng)的Makefile文件。
在執(zhí)行configure腳本時,可以加入許多配置選項(xiàng),其詳細(xì)說明可以參看ACE_wrappers目錄下的ACE-INSTALL.html文件,
對于Redhat9系統(tǒng)來說,不必加任何參數(shù),ACE就可以很好的工作了。
../configure
在漫長的檢查和配置之后,如果沒有什么問題,你就可以開始編譯了。
這一步很簡單,執(zhí)行
make
然后,泡一杯茶,靜靜的等待就行了。
如果編譯順利的通過(通常都會是這樣的),那么恭喜你,你已經(jīng)成功了一大半了,下面要做的僅僅是以些配置工作而已。
接下來的工作是安裝,這一步是可選的,目的是把編譯生成的ACE的庫文件、頭文件和手冊頁等安裝到/usr/local的相應(yīng)目錄中去,為了今后使用的方便,我建議你還是進(jìn)行這一步,執(zhí)行
su
root's password
make install
安裝之后,我們就可以進(jìn)行最后的配置工作了。
首先設(shè)置環(huán)境變量ACE_ROOT,執(zhí)行
setenv ACE_ROOT /home/zhc/ace/ACE_wrappers
注意其中的路徑要根據(jù)你的實(shí)際情況而定
如果你不想每次都手工設(shè)定路徑,可以編輯你的bash的配置文件,執(zhí)行
cd
vi .bash_profile
在其中填加如下兩行
ACE_ROOT=/home/work/research/ace/ACE_wrappers
export ACE_ROOT
然后,在$ACE_ROOT/ace目錄中創(chuàng)建一個名為config.h的文件,在其中包含如下一行
#include "ace/config-linux.h"
或者,簡單起見,你也可以直接建立一個指向config-linux.h的符號鏈接,執(zhí)行
ln -s config-linux.h config.h
同樣,在$ACE_ROOT/include/makeinclude目錄中創(chuàng)建一個名為platform_macros.GNU的文件,在其中包含如下一行
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
或者,簡單起見,你也可以直接建立一個指向platform_linux.GNU的符號鏈接,執(zhí)行
ln -s platform_linux.GNU platform_macros.GNU
最后一步,設(shè)置環(huán)境變量LD_LIBRARY_PATH,執(zhí)行
setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
或者在~/.bash_profile文件中添加如下兩行
LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
安裝完成:
經(jīng)過上面的步驟,ACE已經(jīng)安裝到了您的系統(tǒng)上了,
下面我們將編譯并執(zhí)行ACE的例程以驗(yàn)證我們的工作。
這里我們以《C++網(wǎng)絡(luò)編程,卷一》所帶的例子為例。
進(jìn)入例程目錄,執(zhí)行
cd $(ACE_ROOT)/examples/C++NPv1
編譯例子程序,執(zhí)行
make
如果前面的安裝和配置正確,很快就能夠得到編譯后的例子程序。
分別執(zhí)行一個服務(wù)器程序(隨便哪一個都行)和一個客戶端程序(Logging_Client),
如果程序運(yùn)行正確,說明前面的安裝和配置成功,下面你就可以開始你的ACE學(xué)習(xí)之旅了
?