VS2008下ACE/TAO的編譯for WINDOWS

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的機器上是不能使用的。

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