Windows下VC編譯OpenDDS


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.

測試通過。

 

參考文章:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM