標籤:android des style blog class code
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
OpenDDShttp://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.logmsbuild ACE_vc11.sln /p:Configuration=Release > build_ace_debug.logmsbuild ACE_TAO_vc11.sln /p:Configuration=Debug > build_tao_debug.logmsbuild 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.logmsbuild 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.iniMessage: subject = Review subject_id = 99 from = Comic Book Guy count = 0 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 1 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 2 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 3 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 4 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 5 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 6 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 7 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: subject = Review subject_id = 99 from = Comic Book Guy count = 8 text = Worst. Movie. Ever.SampleInfo.sample_rank = 0Message: 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 InfoRepotest PASSED.
測試通過。
參考文章:
Windows 下使用 VC 編譯 OpenDDS 的過程
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