1. 下載ACE+TAO.zip
示例版本:ACE+TAO+CIAO-5.7.0.zip(選擇Full下載,它包含了vc9的解決方案)
下載地址:http://download.dre.vanderbilt.edu/
2. 解壓至自定義目錄
我們現在把它解壓到C:/,現在ACE的目錄如下顯示 C:/ACE_wrappers |- ace |- apps |- gperf |... |- docs |- TAO |- CIAO |- docs |- tao |- TAO_IDL |- orbsvcs |... |...
3. 配置環境變量 ACE_ROOT = C:/ACE_wrappers TAO_ROOT = C:/ACE_wrappers/TAO 在系統環境變量Path中添加,否則會找不到DLL. %ACE_ROOT%/bin; %ACE_ROOT%/lib; 兩項,在以後的工程中需要用到
秋水秋葉 10-03-24, 18:47
4、選擇Tools -> Options -> Projects and Solutions -> VC++ Directories,添加如下編譯器環境變量:
Executable files:
$(ACE_ROOT)/bin
$(CIAO_ROOT)/bin(待選)
Include files:
$(ACE_ROOT)
$(TAO_ROOT)
$(TAO_ROOT)/orbsvcs
$(CIAO_ROOT)(待選)
$(CIAO_ROOT)/ciao(待選)
Library files:
$(ACE_ROOT)/lib
5. 編譯ACE a. 在%ACE_ROOT%/ace下添加config.h,內容可以如下,我們不使用MFC等,故內容比較簡單,需要的用戶可以參考%ACE_ROOT%/ACE-INSTALL.html安裝指導文件添加相應信息
/* config.h */ #ifndef CONFIG_H #define CONFIG_H
#define ACE_NO_INLINE #define ACE_HAS_STANDARD_CPP_LIBRARY 1 #include "ace/config-win32.h"
#endif //config.h
注:
1、#include "ace/config-win32.h"以說明是要在win32平臺下進行編譯。
注: #include "config-win32.h"亦可
2、如果是98/ME,則在ACE_ROOT/ace/config.h的最前面加上
#define ACE_HAS_WINNT4 0
來關掉一些NT/2000中特有的代碼。
3、 如果你想用MSVC的STL庫 (如iostream, cstdio等), 則在config.h文件中的
#include語句前添加下面的行:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
注: 推薦使用該編譯開關. 否則對新手而言, 在自己的工程中使用MSVC的STL庫時會有一些小麻煩.
4、如果在ACE中要使用MFC的庫,則需要在config.h中添加:
#define ACE_HAS_MFC 1
5、在默認情況下,所有的ACE工程使用的是MSVC的DLL文件作爲運行時庫。你可以選擇使用ACE的靜態庫文件(LIB)而不需考慮這些運行時庫。選擇動態鏈接的原因是所有的NT都會包含這些dll文件(節省空間). 如果你想使用MFC的靜態庫版本,則需要在config.h中加入以下的宏定義:
#define ACE_USES_STATIC_MFC 1
你也可以全部使用靜態庫,這需要你在ACE的工程文件中自己設置。
6. 如果定義了ACE_AS_STATIC_LIBS 宏,則ACE 庫將被編譯成爲靜態庫。如果你的程序要靜態鏈接ACE的靜態庫,則在你的工程中也要定義這個宏:
ACE_AS_STATIC_LIBS.
作爲可選項,爲了減小靜態庫文件和你的可執行程序的大小,你可以在ACE_ROOT/ace/config.h文件的#include語句前添加如下的宏定義#define ACE_NO_INLINE來禁止內聯函數。
7、 若是在其它平臺上進行編譯,還需要添加文件:
$ACE_ROOT/include/makeinclude/platform_macros.GNU
b.編譯順序 (按照%ACE_ROOT%中提供的項目文件導入VS2008)
%ACE_ROOT% vcbuild ACE_vc9.sln "Debug|Win32"
6、編譯TAO
cd %TAO_ROOT/TAO_IDL
vcbuild TAO_IDL_vc9.sln "Debug|Win32"
vcbuild TAO_IDL_vc9.sln "Release|Win32"
cd %TAO_ROOT/
vcbuild TAO_ACE_vc9.sln "Debug|Win32"
vcbuild TAO_ACE_vc9.sln "Release|Win32"
本實驗系統是選擇打開E:/ACE_wrappers/TAO文件夾下的TAO_ACE_vc9.sln,首先是對ACE進行編譯,然後是對TAO進行編譯,因爲是應用TAO進行CORBA應用開發,下面的幾個工程是必須的:
6.1、TAO_IDL_EXE(即tao_idl,也就是我們的idl編譯器,自然少不了,並且後續工程也需要用到該編譯器。該工程依賴於ACE、TAO_IDL_BE、TAO_IDL_FE、gperf等多個工程,編譯TAO_IDL_EXE是會自動先編譯這幾個工程),該程序在編譯TAO時已自動編譯。
6.2、PortableServer(即POA庫,編寫CORBA應用程序哪能離得開POA,該工程依賴於ACE、TAO、CodeSet、AnyTypeCode等工程)
6.3、Naming_Service(即命名服務,這是對於我們開發CORBA應用相當有用的一個基本服務,該工程依賴的其它工程就更多了,就不再一一列舉了)
6.4、由於工程之間存在的複雜依賴關係,你只需編譯以上這三個工程,就可以自動完成約30個工程的編譯工作。編譯完以上工程後,你的%ACE_ROOT%/lib和%ACE_ROOT%/bin下會多出來一些.lib、.dll和.exe文件。作爲一個ORB服務,Name_Service.exe被放在其對應的子目錄%TAO_ROOT%/orbsvcs/Name_Service下。
7、需要添加TAO的靜態鏈接庫文件:
(注意區分 Debug版 Release版)
---------------------------------------------
普通客戶端:
Debug版: ACEd.lib
Release版: ACE.lib
普通服務器:
在ACE.lib/ACEd.lib的基礎上, 還需要添加:
Debug版: PortableServerd.lib (POA適配器)
Release版: PortableServer.lib
客戶端和服務端
如果使用了命名服務, 則需要添加 TAO_CosNaming.lib 或TAO_CosNamingd.lib
如果使用了事件服務, 則需要添加 TAO_CosEvent.lib 或TAO_CosEventd.lib
注意: TAO分Debug和Release版, 所以在開發時, Debug和Release版的設置要嚴格區分. 即使是MS自己的庫也是這樣. 如對於Debug版, 要包含MSVCRTd.lib而不是MSVCRT.lib.
注:
基於VS2008編譯的ACE/TAO的動態鏈接庫(.dll)由於是基於.net frame。在沒有安裝.net frame的機器上是不能使用的。