在Windows上使用VC編譯並安裝ACE

2021-04-25 20:19:18 字數 3483 閱讀 6654

在windows上使用vc編譯並安裝ace

標籤:  

來自官方的readme

在windows上使用vc編譯並安裝ace

ace包含vc7.1和vc8的工程檔案。vc8能夠在windows(桌面/伺服器),wince, winmobie上編譯。大部分使用者對ce/mobile不感興趣,所以這些平台的有自己的solution和project檔案。此外, vc7.1和vc8使用了不同格式但字尾相同的solution和project檔案(.sln,.vcproj)。ace為不同的開發和目標平台提供了不同名字的檔案。平台/名稱的對映關係如下表,所有的solution檔案以.sln為字尾並且所有的project檔案以.vcproj為字尾。

-----------------------------------

不同平台的solution/project檔名

平台  檔名

vc7.1  name(無修飾符)

vc8(桌面/伺服器) name_vc8

vc8(ce/mobile)   name_wince

-----------------------------------

如果用vc8開啟vc7.1的solution和project檔案,請不要做轉換,因為有可能vc7.1轉換到vc8後崩潰。(現在微軟似乎已經解決了這個bug,https://msdn.microsoft.com/visualc/downloads/default.aspx )

2. 在ace_root/ace下面建立config.h,內容如下

#include "ace/config-win32.h"

3. 靜態,dll,mfc的library builds被放在不同的workspace裡。檔名為*_static包含了static builds的工程檔案。 static和dll builds的workspace在doc group的站點上透過穩定的release可以找到。mfc的workspaces還不可用,必須用mpc產生。詳情參考mpc說明。

4. 開啟ace_root/ace.sln。名稱可能因為你的平台而已(比如vc8下使用ace_vc8.sln)

5. 選擇正確的版本(release/debug)編譯,有些狀況必須使用特殊版本,比如如debug tests必須使用debug版的ace等等。

注意:如果你希望使用動態庫,那麼要確保ace_root/lib在環境變數path裡面。否則你可能會遇到找不到ace.dll或這aced.dll的問題。

6. 如果要使用msvc自帶的標準庫c++標頭檔案(iostream,cstdio等),那麼請在ace_root/ace/config.h所有#include前加入

#define ace_has_standard_cpp_library 1

7. 如果要讓ace和mfc庫一起使用, 那麼也把下面這句新增到config.h。注意如果你要用cwinthread產生執行緒,那麼必須使用thr_use_afx標記。

#define ace_has_mfc 1

預設情況下, ace工程使用dll版本的msvc執行時庫。你也可以選擇靜態庫

8. 編譯ace靜態庫需要定義巨集ace_as_static_libs。這個巨集也應該在鏈結ace庫的工程中定義。

可以在config.h中新增#define ace_no_inline以關閉內聯,這樣可以降低靜態庫和exe的大小。

9. ace dll和lib的命名

當使用msvc時,我們使用如下的規則為ace中的dll和lib檔案命名。

"library/dll name" + (is static library ? "s" : "") + (is debugging enable ? "d" : "") +

ace測試用例

測試用例位於ace_root/tests。該目錄下的tests.sln包含了所有的測試用例。如果你用batchbuild編譯了所有的測試用例,你可以執行perl指令碼run_test.pl來測試所有的用例。

安裝環境:

作業系統:windows xp 專業版

編譯環境:vs2005中文版

ace版本:ace-5.5.1

安裝過程:

ace的安裝檔案可以在http://download.dre.vanderbilt.edu/

設定環境變數

新增使用者的path環境變數,值為%ace_root%/lib,這樣才能保證系統能找到ace生成的動態連線庫。

設定vs2005的c++開發專案資訊,依次開啟選單 工具-選項-專案和解決方案-vc++目錄 ,在右側目錄列表中選擇"包含目錄",新增$(ace_root),在右側目錄列表中選擇"庫檔案",新增$(ace_root)/lib。

編譯ace

在ace_root/ace目錄建立乙個名為config.h的檔案。編輯檔案並加入以下內容

#define ace_has_standard_cpp_library 1

#include "ace/config-win32.h"

其中第一行是因為我想用標準c++跨平台,第二行則是必須要的,表明當前是在win32的環境下進行ace的專案。

進入ace_root/ace目錄中,能發現ace現在已經帶vs2005的編譯專案了,直接開啟ace_vc8.sln,直接生成ace專案的debug版和release版,編譯過程還比較快,大概就幾分鐘的樣子。編譯鏈結完成後,在ace_root/lib中一共生成了四個檔案,分別是"ace.dll","ace.lib", "aced.dll","aced.lib",其中帶"d"表示的是debug版本。

檢驗 ace

開啟vs2005,建立乙個空專案,將ace程式設計師手冊中的第乙個程式拷入其中。

編譯,如果不出意外的話就能看到你的ace版的" hello world"啦。

注意:

ace專案的字符集設定是"未設定",而vs2005的c++專案預設字符集是"使用 unicode 字符集",如果用到了ace鏈結庫時需要將字符集改為"未設定"(在"專案屬性->配置屬性->專案預設值->字符集"中配置),否則可能出現鏈結錯誤。

/支援unicode的ace編譯。

編譯前在config.h中多新增如下兩行,並且將專案預設字符集改為"使用 unicode 字符集"。

#define ace_use_wchar

#define ace_has_wchar

注意:

在windows平台下,如果沒有定義如上兩個巨集, ace會自動將 main 函式重定義, 並主動替你把 ace::init() 和 ace::fini() 呼叫好。新增這兩個巨集後,需要在main函式中手動呼叫。

main 函式重定義這一行為不能保證在所有平台和環境下都正常運作(如使用mfc時),其實不管如何,不妨在 main 函式的開頭和結尾分別再呼叫一次 ace::init() 和 ace::fini()。 ace::init() 和 ace::fini() 裡面都有巢狀層次計數機制,因此只要它們能夠保證成對出現, 並且不出現交叉巢狀, 多呼叫一遍並不會出現任何問題。

在Windows使用VC編譯ICU

環境 win7 64位,vs2010 2.解壓,如e program files x86 icu,在icu新增一資料夾bin,並在電腦環境變數裡新增e program files x86 icu bin 3.開啟 source allinone allinone.sln 選擇win32平台 好像ic...

在Windows上編譯GRPCPP SDK

install visual studio 2015 or 2017 visual c compiler will be used optional install git。如果不借助梯子,git clone獲取grpc專案超高概率失敗 install cmake。install nasm and ...

在Windows上使用clang編譯器

在stackoverflow等 上,經常出現各種編譯器的對比的結果,其中clang是很常見的,那麼,怎樣在windows上使用clang呢,沒那麼直觀。直接寫個小helloworld,並不能編譯 fatal error stdio.h file not found 或者其他類似的找不到標頭檔案的錯誤...