OpenDDS是一個OMG組織DDS標准的C++開源實現,OpenDDS同時也提供Java支持。OpenDDS依賴ACE抽象層來提供不同平台的兼容性,同時也依賴於TAO(例如TAO的IDL編譯器)。當前OpenDDS有ociweb ObjectComputing維護,官方網站http://www.opendds.org/。目前OpenDDS支持的平台有Windows,Linux family,Android,VxWorks等,可用的編譯器包括VC,gcc,QNX gcc等。
1. OpenDDS編譯准備
OpenDDS如上文所述依賴TAO(TAO依賴於ACE),同時也依賴Perl。Perl在OpenDDS的作用是1. 運行自動測試腳本或OpenDDS例程 2. MPC依賴於Perl生成Makefiles或者VC項目文件。所以編譯OpenDDS的第一步需要建立OpenDDS依賴的環境即:編譯TAO+ACE、配置Perl環境。
a. TAO+ACE
因為TAO依賴ACE,在ACE之上,所以最好捆綁下載配套的ACE+TAO發布版本。ACE+TAO的下載網站http://download.dre.vanderbilt.edu/,下載最新版本的ACE+TAO.zip。網站下載有兩種版本可供選擇Full版和Sources Only版,Full指的是項目文件已經生成的版本(包括GNUMakefiles和VC項目文件),Sources Only版本僅僅包含源代碼,需要自己使用MPC生成makefile。
b. Perl
Windows環境下,可下載ActiveState Perl。
c. OpenDDS
OpenDDS下載地址http://download.ociweb.com/OpenDDS/。
2. 安裝Perl
3. 編譯TAO+ACE
編譯TAO+ACE可參考http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/TAO-INSTALL.html。
a. 解壓ACE+TAO-6.2.6.zip,我的解壓路徑是D:\。
b. 設置相關環境變量
ACE_ROOT設置為zip解壓后的根目錄,我的為D:\ACE_wrappers;
TAO_ROOT設置為%ACE_ROOT%\TAO,我的為D:\ACE_wrappers\TAO;
PATH添加%ACE_ROOT%\lib和%ACE_ROOT%\bin。
c. 設置config.h
於%ACE_ROOT%/ace下新建一個配置文件config.h,內容為#include “ace/config-win32.h”。
d. 編譯
分別打開%ACE_ROOT%\ACE.sln和%TAO_ROOT%\ACE_TAO.sln,依次進行編譯。根據解決方案文件名可以得知解決方案對應的VC版本。
Platform
File Name
VC7.1
name_vc71
VC8 for desktop/server
name_vc8
VC8 for Windows CE/Mobile
name_WinCE
VC9 for desktop/server
name_vc9
VC10 for desktop/server
name_vc10
VS2012
name_vc11
也可以使用VS命令行工具進行編譯。Debug版本和Release版本的編譯命令分別如下:
msbuild ACE_vc11.sln /p:Configuration=Debug > build_ace_debug.log msbuild ACE_vc11.sln /p:Configuration=Release > build_ace_debug.log msbuild ACE_TAO_vc11.sln /p:Configuration=Debug > build_tao_debug.log msbuild ACE_TAO_vc11.sln /p:Configuration=Release > build_tao_debug.log
4. 編譯OpenDDS
a. 解壓OpenDDS壓縮文件,我的解壓路徑是D:\
b. 設置相關環境變量
設置%DDS_ROOT%為OpenDDS解壓后的根目錄,我的為D:\DDS;
PATH添加% DDS_ROOT %\lib和% DDS_ROOT %\bin。
c. 編譯OpenDDS
打開DDS.sln進行編譯。文件名與編譯器版本的對應關系與TAO相同。
NOTE: OpenDDS不提供VS2012版本的工程文件,所以使用VS2012或更高版本的IDE打開解決方案文件時,需要更新解決方案與項目文件。但是在更新過程中有可能出錯,我遇到的是pre include路徑變成亂碼的錯誤,需要重新更新一下。當然最好的辦法是直接使用對應的版本編譯。
可以使用VS命令行工具進行編譯。命令如下:
msbuild DDS_vc10.sln /p:Configuration=Debug > build_dds_debug.log
msbuild DDS_vc10.sln /p:Configuration=Release > build_dds_debug.log
5. 運行測試腳本
編譯完成之后,可以運行測試腳本觀察是否OpenDDS環境是否搭建成功。切換到D:\DDS\examples\DCPS\Messenger_Imr目錄,運行run_test.pl
D:\DDS\examples\DCPS\Messenger_Imr>.\run_test.pl > test.log
test.log內容如下:
>>> D:\ACE_wrappers\TAO\orbsvcs\ImplRepo_Service\.\tao_imr_locator.EXE -o imr.ior -orbendpoint iiop://:15021 >>> D:\ACE_wrappers\TAO\orbsvcs\ImplRepo_Service\.\tao_imr_activator.EXE -o activator.ior -ORBInitRef ImplRepoService=file://imr.ior -orbendpoint iiop://:14908 >>> D:\DDS\bin\.\DCPSInfoRepo.EXE -NOBITS -o repo.ior -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior >>> D:\ACE_wrappers\bin\tao_imr.EXE -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo >>> D:\ACE_wrappers\bin\tao_imr.EXE -ORBInitRef ImplRepoService=file://imr.ior update InfoRepo -l WJY -c "D:\DDS\bin\.\DCPSInfoRepo.EXE -NOBITS -o repo.ior -ORBuseimr 1 -ORBInitRef ImplRepoService=file://imr.ior" >>> D:\ACE_wrappers\bin\tao_imr.EXE -ORBInitRef ImplRepoService=file://imr.ior list -v .\.\publisher.EXE -DCPSConfigFile pub.ini -orbendpoint iiop://:16309 .\.\subscriber.EXE -DCPSConfigFile sub.ini Message: subject = Review subject_id = 99 from = Comic Book Guy count = 0 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 1 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 2 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 3 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 4 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 5 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 6 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 7 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 8 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 Message: subject = Review subject_id = 99 from = Comic Book Guy count = 9 text = Worst. Movie. Ever. SampleInfo.sample_rank = 0 >>> D:\ACE_wrappers\bin\tao_imr.EXE -ORBInitRef ImplRepoService=file://imr.ior shutdown InfoRepo test PASSED.測試通過。
參考文章:
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#win32
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/TAO-INSTALL.html
