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内容如下:

Windows下VC编译OpenDDS
>>> 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

测试通过。

 

参考文章:

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

Windows下VC编译OpenDDS,布布扣,bubuko.com

Windows下VC编译OpenDDS

上一篇:在Win7环境下安装启动Linux


下一篇:win7家庭版升级win7旗舰版