windows下ACE怎樣安裝與使用說明?

本文分2部分 第1部分:怎樣安裝ACE(其實就是怎樣編譯) 第2部分:怎樣使用ACE(其實就是把ACE源代碼裏的1個例子搬出來,然後介紹了下怎麼使用)

-----------------------------------第1部分:怎樣安裝ACE(其實就是怎樣編譯)-----------------------------------

(1)這個ACE的主頁非常的繞.先看下網上摘抄的

主頁

ACE的主頁爲:http://www.cs.wustl.edu/~schmidt/ACE.html,在這裏可獲得最新版本的ACE以及其他相關資源。

相關網站:

ACE開發者 http://www.acejoy.com/

Douglas Schmidt's Home Page
http://www.cs.wustl.edu/~schmidt

ACE-5.4+TAO-1.4+CIAO-0.4 Documentation
http://www.huihoo.com/ace_tao/ACE-5.4-html/html/index.html

產品主頁
。ACE - The ADAPTIVE Communication Environment
http://www.cs.wustl.edu/~schmidt/ACE.html

。JACE - Java版本的ACE
http://www.cs.wustl.edu/~eea1/JACE.html

。TAO - Real-time CORBA with TAO(TM) (The ACE ORB)
http://www.cs.wustl.edu/~schmidt/TAO.html

。CIAO - Component-Integrated ACE ORB
http://www.cs.wustl.edu/~schmidt/CIAO.html

。JAWS - 高性能、自適配的Web服務器,使用ACE提供的構架組件和模式構建,JAWS被構造成“構架的構架”
http://www.dre.vanderbilt.edu/JAWS/

。ZEN - JAVA實現的實時ORB
http://zen.ece.uci.edu/

。POSIX ACE - (PACE)項目是爲輕量級系統設計的提供的操作系統抽像層
http://www.cs.wustl.edu/~schmidt/ACE_wrappers/PACE/docs/www/
相關資源和項目:
The CORBA & CORBA Component Model (CCM) Page
http://ditec.um.es/~dsevilla/ccm/

OpenCCM - The Open CORBA Component Model Platform
http://openccm.objectweb.org/

starccm, an CORBA Component Model research project(including OTS and PSS), funded by Chinese 863 Hi-tech research program. Core designer/core developer.
http://sourceforge.net/projects/starccm/

Agent and Distributed Objects Quality of Service (QoS)
http://www.atl.external.lmco.com/projects/QoS/

POSA1,POSA2文檔
http://www.huihoo.com/download/ace-tao/posa.ppt
http://www.huihoo.com/download/ace-tao/posa2.ppt

(2)參考完上面的網站後,第1次用的人可能都分不清是非了.下面就1步1步傻瓜式的操作弄清

第1步:去這個網站下載http://download.dre.vanderbilt.edu/

下載ACE-6.0.0.tar.gz 這個就可以了(上面有很多,按需所選了,第1次用的話,先將就用這個吧)

第2步:下完後解壓到D:\ACE_wrappers_6_0_0

可能第1次看,會有些不明白這些是做什麼的,下面專門從網上摘抄的,做了一下簡單說明

ACE_wrappers的子目錄中大致包含7個目錄:分別爲:

    o   ace 包含ACE工具包的源碼

    o bin含有許多有用的實用程序

    o apps 包含許多基於ACE的應用程序,比如Gateway消息路由

    o docs 含有與ACE的各個方面的有關信息,比如它的編碼指導方針

    o examples 包含很多例子,演示怎麼使用ACE類和框架

    o tests含有ACE的迴歸測試套件

第3步編譯

1.在D:\ACE_wrappers_6_0_0\ace目錄中創建一個頭文件,命名爲config.h,其內容爲:
     #include "ace/config-win32.h"(必選項)

2.在VC++中加載ACE的工程文件(ACE_ROOT \ace\ace.dsw),在release和debug兩種編譯方式下進行編譯,得到相應的庫文件(ACE.dll、ACE.lib 和 ACEd.dll、ACEd.lib),其中ACE.dll 、ACE.lib是由release版生成的,ACEd.dll、ACEd.lib是由debug版生成的。具體操作方法:運行VC++,選擇Build ->Batch Build…,將ACE-Win32 Debug和ACE-Win32 Release全部選中,Rebuild All即可.
備註:我這裏用的是VS2010中文版,在VC++中加載ACE的工程文件(ACE_ROOT \ace\ace_vc10.sln),可能稍微與上面有些區別,但是大致意思同上面一樣 。另外可能對這裏的ACE_ROOT感到疑惑,下面有介紹。先看下批生成怎麼樣做,如圖所示


點生成->批生成->選上win32(如果系統是64位,就選X64)->生成或重新生成 

編譯成功後(大概要編譯30分鐘,視機器性能了),在D:\ACE_wrappers_6_0_0\lib這個路徑下會產生引入庫(.lib)與鏈接庫(.dll),如圖所示

注意:liunx下的DLL動態鏈接庫是.so後綴名
到這裏就安裝完成了,其實就是編譯了.沒什麼.

ACE和VS的比較:VS是個編譯工具,ACE是個庫

區別就是:VS給你編譯好了,直接寫代碼即可,而ACE就是要用戶自己編譯工具與設置系統環境(整的很深奧似的,其實是把一個簡單的東西整的很複雜而已,不過ACE是跨平臺的,能理解),看完下面怎樣使用後,你就會對這整個流程有個初步瞭解

 

-----------------------------------第2部分:怎樣使用ACE-----------------------------------

一共2個例子: 例1,是ACE上的源代碼 例2,就是自己另外寫的

--------------------舉例1:這裏以D:\ACE_wrappers_6_0_0\examples下的Logger事例--------------------

先從ACE目錄中拷貝到別的地方(不要放在原版目錄中,因爲原版是引用文件與庫文件的地方).做下測試

用VS2010打開

報錯1:

3>InitializeBuildStatus:
3>  正在創建“Debug\Logger_Simple_Server_vc10\I386\Logger_Simple_Server.unsuccessfulbuild”,因爲已指定“AlwaysCreate”。
3>ClCompile:
3>  Logging_Acceptor.cpp
3>f:\vc測試\logger\simple-server\logging_acceptor.cpp(3): fatal error C1083: 無法打開包括文件:“ace/WFMO_Reactor.h”: No such file or directory
3>  Logging_Handler.cpp
3>f:\vc測試\logger\simple-server\logging_handler.cpp(3): fatal error C1083: 無法打開包括文件:“ace/Log_Msg.h”: No such file or directory
3>  server_loggerd.cpp
3>f:\vc測試\logger\simple-server\server_loggerd.cpp(10): fatal error C1083: 無法打開包括文件:“ace/Get_Opt.h”: No such file or directory
解決辦法:

‍在屬性中放上

包含目錄 D:\ACE_wrappers_6_0_0

庫目錄 D:\ACE_wrappers_6_0_0\lib

如圖所示

當然,你若不想拷貝到別的目錄,直接在ACE原版目錄下的那個事例下編譯也行,它不會報這個錯誤,因爲它路徑,已經指定好了../../../lib,上層目錄的上層目錄的上層目錄的下層目錄lib,所以直接編譯不會報錯(可參考)

報錯2:

說找不到ACEd.dll,如圖所示

這個問題:解決辦法:是從源頭找起

首先:要明白DLL的歷史

摘抄:孫鑫<<VC++深入詳解>>第19章701頁

        Windows API中所有的函數都包含在DLL中,其中有3個最重要的DLL.

        Kernel32.dll,User32.dll與GDI32.dll
靜態庫和動態庫

靜態庫

           函數和數據被編譯進一個二進制文件(通常擴展名爲.lib).在使用靜態庫的情況下,在編譯鏈接可執行文件時,鏈接器從庫中複製這些函數和數據並把它們和應用程序的其它模塊組合起來創建最終的可執行文件(.exe文件).當發佈產品時,只需要發佈這個可執行文件,並不需要發佈被使用的靜態庫

動態庫

          在使用動態庫的時候,往往提供兩個文件:一個引入庫(.lib)文件和一個DLL(.dll)文件.雖然引入庫的後綴名也是"lib",但是,動態庫的引入庫文件與靜態庫文件有着本質區別,對一個DLL來說,其引入庫文件(.lib)包含該DLL導出的函數和變量的符號名,而.dll文件包含該DLL實際的函數和數據.在使用動態庫的情況下,在編譯鏈接可執行文件時,只需要鏈接該DLL的引入庫文件,該DLL中的函數代碼和數據並不複製到可執行文件,直到可執行程序運行時,纔去加載所需要的DLL,將該DLL映射到進程的地址空間中,然後訪問DLL中導出的函數.這時,在發佈產品時,除了發佈可執行文件以外,同時還要發佈該程序將要調用的動態鏈接庫

其次,此源代碼的程序默認的運行庫是多線程調試DLL,如圖所示


這裏很明顯是動態庫,上面也講動態庫的基礎.這裏主要是包含LIB.目錄已經指的很清楚,上面已說了.

編譯鏈接時也能正常通過,這說明LIB並沒有問題.很明顯的.這個DLL在ACE第1次"安裝的時候",就已經固定了.

解決辦法:
方法1.把這個ACEd.dll放到與.exe的同一目錄,這樣運行可執行程序時不會報錯了

方法2.把這個ACEd.dll放到C:\WINDOWS\system32目錄下

方法3.改系統參數,以下是摘抄的

    無法找到動態鏈接庫aced.dll於指定的路徑?
    爲系統變量PATH加上D:\ACE_wrappers\bin
第1次看不太明白.沒關係.按照下面的傻瓜式步驟.看完,你就會了

‍桌面->我的電腦->屬性->高級->環境變量,這時會出現2個選項

第1個:Administrator的用戶變量--->這個的意思是隻爲此超級管理員設置,單獨的用戶設置,如果有來賓用戶,就是單獨的來賓用戶

第2個:系統變量--->這個是全局的.所有不管是超級管理員還是來賓用戶

這裏選擇第2個系統變量->找到Path,打開彈出變量名:Path 變量值:.....

增加格式如下;+路徑

;D:\ACE_wrappers_6_0_0\lib

拷貝這個到最後即可,如圖所示:

任何一種方法都能運行程序.

到這裏也順便講講ACE_ROOT,爲什麼要在系統變量中添加這個,上圖也添加了個ACE_ROOT2,做參考.其實它無非是一個路徑名而已.但是它的最重要功能是可移植性.因爲ACE的設計就是跨平臺,所以添加這個系統變量是很正常的

摘抄:

環境設置

你可能打算註冊一些環境變量指向你安裝OGRE的根目錄,這樣你可以把你的所有路徑與這個變量關聯。這樣的話當你移動這些東西到別處或者別的機器上時可以非常簡單的重新定位這些路徑。關於查看與修改環境變量,請參閱以下文檔:Windows,Linux以及 Mac OSX

  • 如果你下載並安裝了預編譯版(precompiled) OGRE SDK,那你應該已經擁有一個名爲'OGRE_HOME'的環境變量了,它指向了你安裝OGRE的那個文件夾。如果沒有的話,你也許是在系統的另一個用戶下安裝的OGRE,那麼手動定義一下 OGRE_HOME 環境變量就行了。
  • 如果你下載的是源代碼版本,你應該註冊一個新的環境變量 OGRE_SRC 指向OGRE源代碼中的'ogrenew'文件夾。

這個就是爲什麼要加系統變量ACE_ROOT的原因!

 

--------------------舉例2:--------------------

例子2:會比例子1標準一點.一步一步前進

首先:系統配置環境:

變量名 ACE_ROOT 變量值 D:\ACE_wrappers_6_0_0

變量名 Path             變量值 在後面增加;%ACE_ROOT%\lib

其它都基本上同上面一樣.不過建議一點:庫路徑最好放統一.爲了體現可方便跨平臺性(比如公司有一臺寫了一個程序,要能直接拷貝到宿舍就能直接用,不需要在配置系統環境)

在VS中配置時,


(2)VS中配置環境--->注意在Debug與Release版本各配置一次(配置方法一樣),這樣以後切換時,就不需要配來配去了

正確配置:

包含目錄:$(ACE_ROOT)

包含庫:$(ACE_ROOT)\lib

錯誤配置:注意$與%別弄混了

包含目錄:%ACE_ROOT

包含庫:%ACE_ROOT%\lib

 


注:這個和Windows的Hello World!有着本質的區別.這個是用具有跨平臺的庫寫出來的

代碼如下:

// login.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"

#ifdef _DEBUG
#pragma comment (lib,"ACEd.lib")
#else
#pragma comment (lib,"ACE.lib")
#endif

#include "ace/OS_main.h"
#include "ace/Service_Config.h"

int
ACE_TMAIN (int argc , ACE_TCHAR *argv[])
{
 ACE_OS::printf("Hello World!\n");
 return 0;
}

 附註1:本文講的是最基礎的.比如怎麼安裝,與怎麼編譯ACE自帶的代碼,並且給出怎樣自己寫出一個Hello World!先認識一下,1步1步來認識它

原文網址鏈接 http://hi.baidu.com/hustor/item/ba85ffba3b84d7ee4fc7fdc0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章