ACE+TAO(7.0.5)+CIAO+OpenDDS 3.16 编译
采用ACE+TAO(7.0.5)、CIAO(3.10)-DANCE、OpenDDS-3.16,编译构建OpenDDS系统。本文目的尽量简洁说明ACE+TAO+CIAO+DANCE+OpenDDS构建过程,方便快速生成应用环境。
内容:需要的工具、依赖项目配置、目录组织、环境变量、配置项目依赖mpb、生成VC项目的顺序、处理异常。
1、工具:
vs2015,
ActiveState+Perl 5.34。注意:安装ActivePerl5.28,可生成项目。
2、依赖项目:
解压到OpenDDS\ACE_wrappers\contrib目录下,方便生成。
(1)boost 1.68:添加环境变量 ,
BOOST_ROOT : %ACE_ROOT%\contrib\boost
BOOST_VERSION :1_68
注意:boost 的 include实际路径,%ACE_ROOT%\contrib\boost\include%BOOST_VERSION%\boost
(2)bison-flex:下载bison 2.7,解压到contrib;环境变量
path += %ACE_ROOT%\contrib\bison-flex
(3)libcutl:添加环境变量
CUTL_ROOT : %ACE_ROOT%\contrib\libcutl
(4)openssl 添加环境变量
OPENSSL_ROOT :%ACE_ROOT%\contrib\openssl
(5)xercesc-3.2.3 添加环境变量
XERCESCROOT :%ACE_ROOT%\contrib\xercesc-3.2.3
(6)XSC-master 添加环境变量
https://www.codacy.com/gh/DOCGroup/XSC
XSCROOT:%ACE_ROOT%\contrib\XSC-master
(7)zlib1.2.11 添加环境变量
ZLIB_ROOT : %ACE_ROOT%\contrib\zlib1.2.11
3、配置环境变量
1)目录结构
yourdir:是你的目录。
yourdir
| -ddssrc : 根,OpenDDS的代码目录
|- ACE_wrappers ACE 代码目录
|- TAO TAO 代码目录
|- CIAO CIAO 目录
|- DANCE DaNCE 目录
2)环境变量
ACE_ROOT : yourdir\DDSsrc\ACE_wrappers
TAO_ROOT :%ACE_ROOT%\TAO
CIAO_ROOT:%ACE_ROOT%\TAO\CIAO
DANCE_ROOT: %ACE_ROOT%\TAO\CIAO\DAnCE
DDS_ROOT:yourdir\DDSsrc
3)在path环境变量中添加
%ACE_ROOT%\MPC
%TAO_ROOT%\bin
%ACE_ROOT%\bin
%ACE_ROOT%\lib
%DDS_ROOT%\lib
%DDS_ROOT%\bin
4、配置ace
1)添加 ACE_wrappers\ace\config
2)配置 ACE_wrappers\bin\MakeProjectCreator
(1) 修改 ACE_wrappers\bin\MakeProjectCreator\global.features
…
ssl = 1
java = 1
zlib = 1
boost = 1
xerces3 = 1
…
x11 = 0
gl = 0
…
ace_qtreactor = 0
ace_xtreactor = 0
ace_tkreactor = 0
ace_flreactor = 0
ace_foxreactor = 0
(2) 修改 ACE_wrappers\bin\MakeProjectCreator\vc14.features
qos=1
rwho=0
sctp=0
ssl=0
qt4=0
qt5=0
dummy_label=0
wx=0
fl=0
tk=0
xt=0
zlib=1
xerces3=1
boost=1
mfc=1
cutl=1
3)配置 ACE_wrappers\MPC\config
(1) 添加 ace_svcconf_gen.mpb 文件
// -*- MPC -*-
project {
includes += $(ACE_ROOT)/contrib/bison-flex
}
(2) 修改 bison.mpb 文件
project {
requires += win_bison
4、编译生成
1)使用mwc.pl脚本创建VC项目
启动cmd/powershell,命令行如:
perl %ACE_ROOT%\MPC\mwc.pl -type vc14 .\your_mwc.mwc。
2)创建并编译VC项目
(1)TAO_ACE
构建生成 ACE & TAO
cd %TAO_ROOT%
perl %ACE_ROOT%\MPC\mwc.pl -type vc14 .\TAO_ACE.mwc
(2)CIAO_TAO_DANCE
构建生成 CIAO & DAnCE
cd %CIAO_ROOT%
perl %ACE_ROOT%\MPC\mwc.pl -type vc14 .\CIAO_TAO_DAnCE.mwc
(3)ALL_DDS
构建 ACE TAO DDS
cd %DDS_ROOT%
perl %ACE_ROOT%\MPC\mwc.pl -type vc14 .\ALL_DDS2.mwc
2)处理编译错误
(1)TAO\CIAO\tools\IDL3_to_IDL2\be_helper.cpp
报错误宏参数太多。
ACE_OSCALL (::vfprintf (this->fp_,
format,
ap),
int,
-1,
result);
修改为
ACE_OSCALL(::vfprintf(this->fp_,
format,
ap),
int,
result);
(2)CIAO\DAnCE\tools\Config_Handlers\DnC_Dump_T.cpp
修改:注释掉“val >>= t;”【注意】,注释后可以编译,但错误尚未解决。
// val >>= t;
throw -1;
(3)ace\XML_Utils 中缺少 XML_Typedefs.h 、XML_Typedefs.cpp 文件
注意:下载 ACE-TAO 6.5 ,解压并找到这两个文件,将其拷贝到 DDSsrc\ACE_wrappers\ace\XML_Utils 路径下。
将文件添加到 ACE_XML_Utils 项目中。
5、试验
1)试验DCPS Messager
找到目录:\DDSsrc\tests\DCPS\Messenger,如果没有构建生成publishe\subscriber exe文件,则在 \DDSsrc\ALL_DDS2.mwc 中添加一行:
$(DDS_ROOT)/tests/DCPS/Messenger/Messenger.mpc
再用mwc.pl创建工程并生成试验程序(详见 4 。)
添加两个配置文件:pub1.ini 、sub1.ini,拷贝和修改sub、pub ini。
sub1.ini注意DCPSInfoRepo=corbaloc::192.168.22.1:12345/DCPSInfoRepo
# sub1.ini
[common]
DCPSDebugLevel=0
# 指定网络地址
DCPSInfoRepo=corbaloc::192.168.22.1:12345/DCPSInfoRepo
# DataWriter的缓存分配器可分配的块数。
DCPSChunks=20
DCPSChunkAssociationMutltiplier=10
# 传播延迟因子
DCPSLivelinessFactor=80
DCPSGlobalTransportConfig=$file
[transport/t1]
transport_type=tcp
pub1.ini
#pub1.ini
[common]
DCPSDebugLevel=0
DCPSInfoRepo=corbaloc::192.168.22.1:12345/DCPSInfoRepo
DCPSChunks=20
DCPSChunkAssociationMutltiplier=10
DCPSLivelinessFactor=80
DCPSGlobalTransportConfig=$file
[transport/t1]
transport_type=tcp
打开cmd 或 powershell
(1) 启动DCPSInfoRepo服务。
DCPSInfoRepo -NOBITS -ORBListenEndpoints iiop://192.168.22.1:12345 -ORBDebugLevel 6 -ORBLogFile DCPSLog.log
或
DCPSInfoRepo -ORBListenEndpoints iiop://192.168.22.1:12345 -ORBDebugLevel 6 -ORBLogFile DCPSLog.log
(2)启动subscriber
.\subscriber.exe -DCPSConfigFile .\sub1.ini
(3)启动publisher
.\publisher.exe -DCPSConfigFile .\pub1.ini