天天看點

TAO和ACE在Windows平台下的編譯與安裝

最近要用TAO和ACE來開發中間件,網上找了好多配置環境的例程,發現不是十分的理想,現在結合自己的配置已經安裝步驟,做個簡要的安裝說明。

0. 準備工作

0.1 下載下傳源碼包

源碼可以上官網下載下傳,下載下傳連結http://download.dre.vanderbilt.edu/

打開連結,如下圖:

TAO和ACE在Windows平台下的編譯與安裝

Linux/Unix使用者下載下傳tar.gz或者tar.bz2格式;Windows使用者下載下傳zip格式。

0.2 開發環境

系統:win7 64bit 旗艦版;

開發工具:Visual Studio 2005

1. 配置環境變量

環境變量主要涉及系統環境變量和VS2005的配置。

1.1 系統環境變量

依次打開 計算機 -> 屬性 -> 進階系統設定 -> 進階 -> 環境變量;

1) 建立并設定以下新的環境變量,使其指向各自的根目錄:

ACE_ROOT = /YOUR DIR PATH/ACE_wrappers (ACE根目錄)
TAO_ROOT = %ACE_ROOT%/TAO              (TAO根目錄)           
CIAO_ROOT = %TAO_ROOT%/CIAO            (CIAO根目錄)
           

2)PATH環境變量中追加以下環境變量設定

%ACE_ROOT%/bin(部分通用工具的輸出目錄)
%ACE_ROOT%/lib(所有.lib、.dll檔案的輸出目錄)
           

ACE和TAO的依賴庫檔案會統一放置在lib目錄下,友善進行依賴使用;

可執行檔案放置在bin目錄下。

1.2 VS2005環境設定

打開VS2005,選擇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
           
添加以上配置是為了在開發中,省去在每個項目中配置頭檔案、依賴庫等屬性。

2. 适配平台移植性

ACE主要提供了不同平台的适配性代碼,用于支援不同的平台,同時也為了編譯的成功,後續的使用,需要設定進行以下工作。

2.1 添加頭檔案

%ACE_ROOT%\ace

目錄下建立一個空檔案

config.h

,裡面包含一句,以說明是要在win32平台下進行編譯。

#include "ace/config-win32.h"
           

2.2 添加宏定義 (注意:添加在

#include

之前)

#define ACE_HAS_WINNT4               0         //OS不是NT4.0或以後版本
#define ACE_HAS_STANDARD_CPP_LIBRARY 1          //使用标準C++庫 MSVC的STL庫
#define ACE_HAS_MFC                  1          //使用MFC庫
#define THR_USE_AFX                  1          //使用CWinThread産生新的線程類
#define ACE_USES_STATIC_MFC          1          //靜态連接配接MFC庫
#define ACE_AS_STATIC_LIBS           1          //生成靜态的ACE庫
#define ACE_NO_INLINE                           //是否使用内聯函數在靜态庫内
           

一般僅需在

#include

之前添加宏

ACE_HAS_STANDARD_CPP_LIBRARY

以便于标準C++的跨平台移植。

在預設情況下,所有的ACE工程使用的是MSVC的DLL檔案作為運作時庫。選擇動态連結的原因是所有的NT都會包含這些dll檔案(節省空間).

如果想使用MFC的靜态庫版本,則需要在config.h中加入以下的宏定義:

#define ACE_USES_STATIC_MFC 1

如果定義了

ACE_AS_STATIC_LIBS

宏,則ACE庫将被編譯成為靜态庫。

如果你的程式要靜态連結ACE的靜态庫,則在你的工程中也要定義這個宏:

ACE_AS_STATIC_LIBS

.

作為可選項,為了減小靜态庫檔案和你的可執行程式的大小,你可以在

%ACE_ROOT%\ace\config.h

檔案的#include語句前添加如下的宏定義

#define ACE_NO_INLINE

來禁止内聯函數。

3. 生成VS2005工程

一般情況下,此時便可以編譯vs工程了,但筆者的

VC Workspace/Solution

打開之後一片空白,一個工程也沒有,此時需要安裝perl工具進行sln工程的生成。、

3.0 準備工作

筆者使用的是ActivePerl http://www.activestate.com/activeperl/downloads

具體文法可以參考官方手冊。

下面簡單說說mwc的工作原理:

mwc.pl根據參數中指定的.mwc檔案的内容到相應目錄下查找.mpc檔案,在沒有指定.mwc檔案或.mwc檔案中沒有指定查找目錄的情況下會嘗試進入各子目錄,查找.mpc檔案(相當于一個makefile檔案),按照.mpc檔案生成工程資訊,若連一個.mpc檔案也找不到,就将目前目錄下所有可識别的檔案當作源檔案,産生一個預設的工程檔案。最終,mwc.pl将所有工程檔案合并到一個獨立的Solution/Workspace。

* 在執行perl之前,需要找到各自對應的mwc檔案的路徑 *

3.1 生成ace.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %ACE_ROOT%/ace/ace.mwc
           

指令解釋:

%ACE_ROOT%/bin/mwc.pl 為可執行檔案名;-type vc8為VS2005解決方案對應的參數,可以設定為VC9、Vc10等;configurations為生成的版本資訊,常見的為Debug和Release;-features為特性;%ACE_ROOT%/ace/ace.mwc 為生成的解決方案的原始的mwc檔案,具體解釋3.0章節有解釋。

3.2 生成tao.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %TAO_ROOT%/tao/tao.mwc
           

3.3 生成tao_ace.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %TAO_ROOT%/tao_ace.mwc
           

3.4 生成ciao.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %CIAO_ROOT%/ciao.mwc
           

4. 編譯生成

在第三步執行完成後,會在各自的目錄下生成sln工程檔案,打開編譯即可。

生成檔案的命名規則:

“靜态庫/DLL檔案名” + (是靜态庫嗎? “s” : “”) + (是Debug模式的庫嗎? “d” : “”) + (.dll/.lib)

5. 測試

%ACE_ROOT%/tests

目錄下,有一個vc的工程檔案:

TAO_tests.dsw

來編譯所有的測試代碼。

同樣,我自己也寫了測試程式進行環境的測試,用于輸出

hello world

.

測試代碼如下:

#include "ace/Log_Msg.h"

int _tmain(int argc, _TCHAR* argv[])
{

    ACE_TRACE(ACE_TEXT ("main"));
    ACE_DEBUG ((LM_INFO, ACE_TEXT ("Hello world\n")));
    getchar();
    return ;
}
           
注意工程添加依賴項:

ACEd.lib

繼續閱讀