CORBA Programming with TAO - 2.Compile Source Code(編譯ACE/TAO/CIAO) 收藏摘要:簡要介紹如何在Windows平臺上編譯ACE/TAO/CIAO,及編譯過程中需注意的問題。 正文:隨著ACE/TAO/CIAO研究者研究的不斷深入,整個(gè)平臺變得越來越龐大,涉及的工程及目錄數(shù)目也越來越多,下面簡要介紹一下如何在Windows平臺上編譯ACE/TAO/CIAO,其過程在其它平臺上是類似的。 一、目錄結(jié)構(gòu)在開始之前,先簡要介紹一下整個(gè)產(chǎn)品的目錄結(jié)構(gòu)。ACE(Adaptive Communication Environment)是整個(gè)ACE/TAO/CIAO體系的基礎(chǔ),由操作系統(tǒng)適配層、對并發(fā)/進(jìn)程間通信/虛擬內(nèi)存管理等的OO封裝、ACE框架、網(wǎng)絡(luò)服務(wù)組件等幾個(gè)部分組成;而TAO(The ACE ORB)則是在ACE基礎(chǔ)上建立起來的一個(gè)CORBA ORB實(shí)現(xiàn);CIAO(Component Integrated ACE ORB)則是在TAO基礎(chǔ)上的一個(gè)CORBA Component Model實(shí)現(xiàn),同時(shí)CIAO也是目前相對比較成熟的一個(gè)CCM實(shí)現(xiàn)。 正是由于三者之間的上述關(guān)系,在目錄結(jié)構(gòu)上整個(gè)源碼包也采用了類似下面的結(jié)構(gòu): ACE_ROOT ├─ace ├─docs ├─... ├─TAO │ ├─tao │ ├─docs │ ├─orbsvcs(TAO實(shí)現(xiàn)的眾多CORBA服務(wù)被放置在這個(gè)目錄下) │ ├─... │ ├─CIAO │ │ ├─ciao │ │ ├─docs │ │ ├─DAnCE │ │ ├─RACE │ │ ├─... 三個(gè)產(chǎn)品的幫助文檔,可以在相應(yīng)節(jié)點(diǎn)下的docs目錄中找到,其中除了對相應(yīng)產(chǎn)品特定模塊或服務(wù)的說明外,還包括一些不錯(cuò)的Tutorial,對于我們理解相應(yīng)產(chǎn)品很有幫助(ACE/TAO/CIAO的較完整的文檔是收費(fèi)的,這些隨源碼發(fā)布的文檔雖然少,但仍頗為有用)。 二、關(guān)于編譯器可以使用VC6/7.1/8來編譯ACE/TAO/CIAO,不推薦使用VC7,但由于VC6的Project Settings不支持環(huán)境變量,會對我們使用CIAO帶來一些麻煩(如需手動修改自動生成的工程文件),因此,筆者推薦讀者使用VC8,即Visual C++ 2005來進(jìn)行編譯(注:現(xiàn)在VC++ 2005 Express可以從MS的網(wǎng)站上免費(fèi)獲得,但若安裝該版本的話,需按照http://lab.msdn.microsoft.com/express/visualc/usingpsdk/default.aspx的指示安裝SDK并進(jìn)行相關(guān)設(shè)置)。VC8在調(diào)試器的設(shè)計(jì)上有了很大改進(jìn),同時(shí)對C++標(biāo)準(zhǔn)的支持也有了很大進(jìn)步(但也變得非常耗資源),因此,下面的討論將基于ACE-5.5+TAO-1.5+CIAO-0.5 + VC2005 Express,不保證在其它ACE或編譯器版本下完全一致。 三、基本設(shè)置好啦,廢話說完了,重新回到我們的主題。 首先,設(shè)置好如下環(huán)境變量: ACE_ROOT TAO_ROOT CIAO_ROOT 分別指向ACE根目錄,TAO根目錄(即%ACE_ROOT%/TAO),CIAO根目錄(即%TAO_ROOT%/CIAO)。 在%ACE_ROOT%/ace目錄下添加一個(gè)文件config.h,并在其中添加如下內(nèi)容:
/* -*- C++ -*- */ //============================================================================= /** * @file config.h * */ //============================================================================= #define ACE_HAS_STANDARD_CPP_LIBRARY 1 #include "ace\config-win32.h"
若是在其它平臺上進(jìn)行編譯,還需要添加文件: $ACE_ROOT/include/makeinclude/platform_macros.GNU 具體方法見ACE Installation Guide。
此外,為了便于今后使用ACE/TAO/CIAO,應(yīng)當(dāng)將 %ACE_ROOT%/bin(部分通用工具的輸出目錄) %ACE_ROOT%/lib(所有.lib、.dll文件的輸出目錄) 添加到PATH環(huán)境變量中。 并且,需打開VC8,選擇Tools -> Options -> Projects and Solutions -> VC++ Directories,添加如下編譯器環(huán)境變量: 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 四、開始編譯現(xiàn)在可以開始編譯了,但是,在筆者的Win2000中編譯ACE5.5/TAO1.5/CIAO0.5時(shí)遇到的第一個(gè)問題就是:源碼包中的VC Workspace/Solution打開之后一片空白,一個(gè)工程也沒有。(上一版本沒有這個(gè)問題。最終通過比較源碼包中的.sln文件和通過下面的方法得到的.sln文件,發(fā)現(xiàn)其實(shí)是由于文件是Unix格式造成的) 幾經(jīng)周折,終于想到了一個(gè)辦法:自己運(yùn)行mwc.pl重新生成工程文件。 要運(yùn)行mwc.pl自然需要安裝Perl,安裝過程略。
下面簡單說說mwc的工作原理: mwc.pl根據(jù)參數(shù)中指定的.mwc文件的內(nèi)容到相應(yīng)目錄下查找.mpc文件,在沒有指定.mwc文件或.mwc文件中沒有指定查找目錄的情況下會嘗試進(jìn)入各子目錄,查找.mpc文件(相當(dāng)于一個(gè)makefile文件),按照.mpc文件生成工程信息,若連一個(gè).mpc文件也找不到,就將當(dāng)前目錄下所有可識別的文件當(dāng)作源文件,產(chǎn)生一個(gè)默認(rèn)的工程文件。最終,mwc.pl將所有工程文件合并到一個(gè)獨(dú)立的Solution/Workspace。 .mwc文件的結(jié)構(gòu)其實(shí)很簡單,下面是%TAO_ROOT%/TAO_ACE.mwc的全部內(nèi)容:
// -*- MPC -*- // TAO_ACE.mwc,v 1.1 2006/02/16 09:20:48 jwillemsen Exp
workspace { ../ace ../apps/gperf/src ../ACEXML/common ../ACEXML/parser/parser ../ACEXML/apps/svcconf ../Kokyu/Kokyu.mpc ../protocols tao TAO_IDL utils orbsvcs exclude { orbsvcs/tests orbsvcs/performance-tests orbsvcs/examples } }
其作用就是告訴mwc.pl到哪些目錄下去查找.mpc文件(若沒有指定,則表示應(yīng)檢查所有子目錄),而其中的exclude則表示應(yīng)略過那些目錄,如果你愿意,完全可以自己編寫.mwc文件(不過,工程具體的描述文件.mpc則比較復(fù)雜,一言難盡,想一探究竟的話,最好還是看看MPC的說明文檔http://www.cs./~schmidt/ACE_wrappers/MPC/USAGE或http://downloads./MPC/MakeProjectCreator.pdf)。 對mwc.pl的工作原理有了基本的了解后,就可以運(yùn)行mwc.pl生成工程文件了。執(zhí)行mwc.pl的辦法很簡單,如要生成使用CIAO的基本工程,可以在%CIAO_ROOT%下運(yùn)行: mwc.pl -type vc8 CIAO_TAO.mwc 上述命令將產(chǎn)生一個(gè)名為CIAO_TAO.sln的Solution文件,有了.sln文件,就可以正式進(jìn)行編譯了。
應(yīng)用TAO進(jìn)行CORBA應(yīng)用開發(fā),下面的幾個(gè)工程是必須的: · TAO_IDL_EXE(即tao_idl,也就是我們的idl編譯器,自然少不了,并且后續(xù)工程也需要用到該編譯器。該工程依賴于ACE、TAO_IDL_BE、TAO_IDL_FE、gperf等多個(gè)工程,編譯TAO_IDL_EXE是會自動先編譯這幾個(gè)工程) · PortableServer(即POA庫,編寫CORBA應(yīng)用程序哪能離得開POA,該工程依賴于ACE、TAO、CodeSet、AnyTypeCode等工程) · Naming_Service(即命名服務(wù),這是對于我們開發(fā)CORBA應(yīng)用相當(dāng)有用的一個(gè)基本服務(wù),該工程依賴的其它工程就更多了,就不再一一列舉了) 而要使用CIAO,則還必須編譯%CIAO_ROOT%/DAnCE下的多個(gè)工程,這些工程包括: · ExecutionManager · NodeManager · Plan_Launcher · NodeApplication 這幾個(gè)工程是部署與配置引擎(Deployment And Configuration Engine,DAnCE)的一部分,負(fù)責(zé)處理面向組件的應(yīng)用的部署與配置。 由于工程之間存在的復(fù)雜依賴關(guān)系,你只需編譯最后這三個(gè)工程,就可以自動完成約30個(gè)工程的編譯工作。編譯完以上工程后,你的%ACE_ROOT%/lib和%ACE_ROOT%/bin下會多出來一些.lib、.dll和.exe文件。作為一個(gè)ORB服務(wù),Name_Service.exe被放在其對應(yīng)的子目錄%TAO_ROOT%/orbsvcs/Name_Service下。
注: 1、為了編譯CIAO_XML_Utils,需要安裝Xerces-C++ 2.7.0,但http://xml./xerces-c/提供的下載采用VC6編譯,該版本不能用于VC7及以上版本,如果你用的不是VC6,則需要下載源碼重新編譯。如果你用的是VC++ 2005 Express,由于沒有ATL及MFC,在編譯時(shí)會遇到一些麻煩,可以在SDK Dir\include下自行添加一個(gè)WINRES.h,在其中添加如下代碼(兩行,空行是必須的): #include <winresrc.h>
2、如果要試用CIAO,還需用到cidl編譯器cidlc,該工具可以從http://www.dre./cidlc/binary/下載。 參考:1. Building and Installing ACE and Its Auxiliary Libraries and Services. http://www.cs./~schmidt/ACE_wrappers/ACE-INSTALL.html 2. Building and Installing CIAO. http://www.cs./~schmidt/ACE_wrappers/TAO/CIAO/CIAO-INSTALL.html 3. The Makefile, Project, and Workspace Creator (MPC). http://downloads./MPC/MakeProjectCreator.pdf |
|
|