目录
- 1、OpenDDS
- 2、编译OpenDDS
- 2.1、准备工作
- 2.2、配置环境变量
- 2.3、编译-TAO_IDL_ACE
- 2.4、编译-TAO_ACE
- 2.5、编译-ACE
- 2.7、生成OpenDDS的解决方案
- 2.8、编译-DDS_no_test
- 2.9、编译-DDS
1、OpenDDS
OpenDDS是使用C++语言针对OMG数据分发服务(DDS)的一种开源实现。由OCI公司设计和维护,可从http://www.opendds.org/的OpenDDS社区门户中获得帮助,目前最新的版本是OpenDDS 3.12.1。
尽管本身OpenDDS采用C++语言实现,但也提供JAVA和JMS的开发接口,这意味着JAVA程序开发也可以使用OpenDDS。
2、编译OpenDDS
2.1、准备工作
注:下面加粗的版本是我使用的。
软件:
VS2019/VS2017/VS2015/VS2010 任选一款 (这里选择的VS版本将会影响下面所有依赖库以及OpenDDS的版本)。
cmake 3.28.1 建议选择最新版,有些依赖库的版本会强制要求最小cmake版本,防止重新下载。
依赖:
OpenDDS 3.27.0 网站: github、OpenDDS.org 都可以
strawberry-perl-5.38.0.1-64bit 官网下载 最新即可
ACETAO-7.1.2 网站: github、官网 都可以
googletest-main 网站:github
注意:确保你有C++开发环境
2.2、配置环境变量
1、首先将strawberry-perl-5.38.0.1-64bit软件进行安装,路径默认即可。
2、将你的OpenDDS和ACETAO解压后放到一块,可以是同级也可以和我一样。 我是将OpenDDS直接放到D盘根目录,然后将ACETAO解压后的包放到OpenDDS里面。
3、先确定对应的路径 ,若无误,写入到环境变量中,共五个变量。
环境变量 | 路径 |
---|---|
DDS_ROOT | D:\OpenDDS |
LD_LIBRARY_PATH | %DDS_ROOT%\lib |
MPC_ROOT | %ACE_ROOT%\MPC |
ACE_ROOT | D:\OpenDDS\ACE_wrappers |
TAO_ROOT | D:\OpenDDS\ACE_wrappers\TAO |
4、在path环境变量中,增加下面四个路径。
5、在%ACE_ROOT%/ace下添加config.h文件,内容为
include "ace/config-win32.h"
2.3、编译-TAO_IDL_ACE
1、使用VS2019打开TAO_IDL_ACE_vs2019.sln项目文件。
打开应该是下面这样的:
2、在项目中找到重定目标解决方案点击确定。
3、在生成中找到生成解决方案并点击。开始编译,大约十几分钟。
等待13个项目均编译成功,若有失败的项目,那么继续执行第三步骤。直到全部编译完成。
2.4、编译-TAO_ACE
再到D:/OpenDDS/ACE_wrappers/TAO_ACE_vs2019.sln 路径下使用同样的方式编译
项目数量为220一定要一样,千万别打开错了。
编译大约要半小时左右,成功生成220就可以了。
2.5、编译-ACE
再到D:/OpenDDS/ACE_wrappers/ACE_vs2019.sln路径下的项目工程,同样的方式编译大约40分钟左右。
总共730个项目,核对一下。
全部成功后就完成了,若有部分失败,则在生成一次解决方案。
2.6、编译-googletest
编译google test是因为编译Open DDS时报缺少这个模块,该模块用于测试,可以不编译。这个源码在github上下载一份就可以了。
目录结构如下:
在CMakeLists.txt 任意位置增加这行代码,因为OpenDDS需要的Debug环境的库是要带后缀d的,而googltest默认不带,所以增加一项。
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
然后打开cmake-gui软件,source code 是源码路径、build 是编译输出路径
具体需要修改下面几项,自己对照一下
确保这行的值为 d
定位到你的OpenDDS的路径上, 需要自己创建build/install路径
然后以此点击Configure、Generate。
然后在build路径下找googletest-distribution.sln项目工程。
打开后 先生成ALL_BUILD项目,然后在生成INSTALL就会将生成的lib以及include自动拷贝至你的OpenDDS路径下
忽略掉我的bin路径,因为我使用的是动态库。这里你正常应该有include和lib文件夹就足够了。
2.7、生成OpenDDS的解决方案
1、生成 DDS_no_tests.sln解决方案
2、生成DDS.sln解决方案
参数介绍:
java: -features java=1
qt: -features qt=1
不同于上述的方式还有一种官方命令:
configure --java --qt=D:\xx\5.45.\msvc2019_64
这种方式相比上面那种会多生成一个环境变量的脚本。
:: OpenDDS configure script: configure --qt=D:\Qt\5.15.2\msvc2019_64 --java
set "ACE_ROOT=D:\OpenDDS\ACE_wrappers"
set "CIAO_ROOT=unused"
set "DANCE_ROOT=unused"
set "DDS_ROOT=D:\OpenDDS"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162"
set "JAVA_PLATFORM=win32"
set "MPC_ROOT=D:\OpenDDS\ACE_wrappers\MPC"
set "PATH=%PATH%;D:\Qt\5.15.2\msvc2019_64\bin;D:\OpenDDS\ACE_wrappers\bin;D:\OpenDDS\bin;D:\OpenDDS\ACE_wrappers\lib;D:\OpenDDS\lib"
set "QT5_BINDIR=D:\Qt\5.15.2\msvc2019_64\bin"
set "QT5_INCDIR=D:\Qt\5.15.2\msvc2019_64\include"
set "QT5_LIBDIR=D:\Qt\5.15.2\msvc2019_64\bin"
set "QT5_SUFFIX="
set "QTDIR=D:\Qt\5.15.2\msvc2019_64"
set "TAO_ROOT=D:\OpenDDS\ACE_wrappers\TAO"
所以,如果你需要用到Qt、Java需要自己配置这个环境变量,否则OpenDDS工程将不能正常编译。
注:下面的第9章节和第10章节只需要编译一个就好。如果你没有执行第7章节,那么只能编译第9章节。
2.8、编译-DDS_no_test
用同样的方式编译DDS,这里我们编译DDS_no_test。无测试 编译更快。依赖更少。
编译成功后如下
2.9、编译-DDS
编译DDS时可能会遇到 TryConstruct.cpp 文件有非法字符,将其转为utf8-bom格式即可。
如果你在之前编译googletest时选择的是动态库,那么在UnitTestsx项目的预处理器中需要加入GTEST_LINKED_AS_SHARED_LIBRARY 宏来指定加载的为动态库。
带有测试的DDS解决方案相比较大,有355个子工程。编译等待半小时左右。