網上的一些文章對於ace的安裝很詳細,但也很千篇一律。實踐中你會遇到很多問題,但網上解決辦法比較少。為此寫了這篇文章,分享之。
由於vc6.0對c++標準支援的不好,所以編譯ace,雖然不會報錯,但編譯出來的dll,lib使用會出現stl的問題,所以第二次編譯我選擇了vc8,推薦使用。
#include "ace/config-win32.h"
#define ace_has_standard_cpp_library 1
2. 開啟ide, tools->options->projects andd solutions->vc++ directories
然後就可以寫測試程式了,可能出現問題:無法解析的外部符號 "__declspec(dllimport) int __cdecl ace::init(void)" (__imp_?init@ace@@yahxz),該符號在函式 _main 中被引用。
至於環境變數,已經不需要了。
3.進入ace_root/ace目錄中,直接開啟ace_vc8.sln,直接生成ace專案的debug版和release版,編譯過程大概需要幾分鐘。完成後,在%ace_root%/lib中能找到以下四個檔案,分別是」ace.dll」,」ace.lib」,」aced.dll」,」aced.lib」,其中帶」d」的表示的是debug版本。
在前頭加上:
#ifdef _debug
#pragma comment(lib,"aced.lib")
#else
#pragma comment(lib,"ace.lib")
#endif
這樣 可解決類似問題。這樣的話我又測試了幾個程式,均編譯通過。至於一些vc6會出現的問題,這裡不做解答。但我會時時更新vc8出現的問題以及解決方案。希望關注。。。
the adaptive communication environment (ace) 是一套免費的、開源的物件導向框架,它為大規模併發通訊軟體實現了許多核心的設計模式。ace提供了一套豐富的、可重用的c++封裝類和框架元件,並且可以跨平台實現大多數常見的通訊軟體的功能。本文將通過幾個非常簡單,並且可以說是粗糙的小例子,為大家講述ace的安裝及配置過程。通過這些簡單的小例子,帶領大家以最快的速度進入ace的世界。我們第一步的目的就是不求完美,但求入門。
首先我要先介紹一下本文所使用的環境,以後本文所提到的所有細節都要和這個環境相匹配,如果大家在安裝配置時遇到問題,也可以用qq(21807822) 或blog(和我聯絡。我使用的是aix 5.3 windows xp home ace 5.5 visual studio.net 2003 如果環境不完全匹配,則安裝過程會有少許的不同。
我們先以windows平台為例說明。用winzip解壓ace-5.5.zip,硬碟最好保留2g以上的空間。我保留的是8個g(畢竟還要幹別的嘛),解壓後的目錄類似
ace_root的目錄,你應該根據自已的系統進行修改。aix下使用的makefile檔案內容如下:
all: test1
test1:test1.o
xlc_r -o test1 test1.o -l$/build/ace/.libs/ -lace
test1.o:test1.cpp
xlc_r -c -o test1.o -i$ test1.cpp
clean:
rm -f test1 *.o
// fuzz: disable check_for_streams_include
#include "ace/streams.h"
#if defined (ace_win32) && (!defined (ace_has_standard_cpp_library) || /
(ace_has_standard_cpp_library == 0) || /
defined (ace_uses_old_iostreams))
# include
#else
# include
#endif
iresult = iaserver.set(nport, pserverhost);
if (iresult == -1)
ace_error_return ((lm_error, "lookup %s, %p/n", pserverhost, nport), 1);
if ( scconnector.connect(ssstream, iaserver) < 0 )
ace_error_return ((lm_error, "%p/n", "connect()"), 1);
strcpy(szbuffer, ptext) ;
ssstream.send_n(szbuffer, strlen(ptext)) ;
memset(szbuffer, 0, sizeof(szbuffer)) ;
iresult = ssstream.recv_n(szbuffer, 1024) ;
nlength = strlen(szbuffer) ;
ace::write_n(ace_stdout, "recv --> " , 9) ;
ace::write_n(ace_stdout, szbuffer, nlength) ;
ace::write_n(ace_stdout, "/n", 1) ;
return 0 ;
}#include "ace/streams.h"
int displaytime(char* ptime) ;
int main(int argc, char *argv)
while(server.accept(stream)!=-1)
server.close();
return 0;
}int displaytime(char* ptime)
在aix上安裝,要先設定ace_root,方法在上面的setenv.sh裡有語句。
第二步也和windows一樣要生成config.h。我們使用的是aix 5.3,所以我是要在config.h裡包含config-aix-5.x.h檔案即可
第三步進入$/include/makeinclude目錄,建立乙個名為platform_macros.gnu的檔案,在其中包含如下一行
include $(ace_root)/include/makeinclude/platform_aix.gnu,另外還有乙個方法是用ln -s platform_aix.gnu platform_macros.gnu
下一步,我們在$目錄裡新建乙個目錄 build。然後cd build。在build目錄裡執行 ../configure,等待一段時間之後,我們再make一下就可以生成ace了
在aix上的安裝過程就到這裡了,下一步,你可以用上面的setenv.sh來初始化環境變數,其實也就是指定ace_root和ld_library_path兩個目錄。
2、在$/ace目錄裡,新建config.h,加入#include "config-aix-5.x.h"語句。
或者不願意生成檔案就用 ln -s config-aix-5.x.h config.h
3、在$/include/makeinclude目錄,新建platform_macros.gnu,加入include $(ace_root)/include/makeinclude/platform_aix.gnu
當然你也可以用ln -s platform_aix.gnu platform_macros.gnu 來做到相同的效果
4、在$裡新建乙個目錄 build
5、在build裡敲 ../configure (注意,要有兩個點)
6、configure成功之後,再make,就大功告成。
7、測試,按上文說法設定ld_library_path,再用上面的源**和makefile嘗試編譯,鏈結,執行吧。
ACE服務端程式設計5 ACE日誌輸出和跟蹤
伺服器程式經常需要在命令列中顯示錯誤訊息 狀態或者用來跟蹤程式的執行路徑,最簡單的方法是使用printf。ace提供了更強大日誌設施 1 可以在編譯時啟用或禁用巨集 2 可以動態的啟用或禁用巨集 3 支援日誌嚴重級別 4 支援日誌重定向 5 支援多執行緒安全和執行緒級配置 使用ace的日誌相關功能,...
在Windows和VC 6 0下的ACE安裝手冊
5 如果使用c 標準庫,比如 iostream之類的,在 config.h 中 include 之前新增 define ace has standard cpp library 1 6 如果使用mfc 在 config.h 中 include 之前新增 define ace has mfc 1 每乙...
5 陣列綜合 8
5 陣列綜合 8 時間限制 1 s 記憶體限制 8192 kb accept 79 submit 177 提交 討論版 描述把n個數字中最小的數字和最大的數字交換,其他數字的位置保持不變,輸出變化後的n個數字。只會有乙個最大的數和乙個最小的數。輸入只有一組案例。乙個正整數n,然後是n個整數。輸出把n...