OpenDDS 在 Windows 上的编译环境部署指南

目录

  • 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_ROOTD:\OpenDDS
LD_LIBRARY_PATH%DDS_ROOT%\lib
MPC_ROOT%ACE_ROOT%\MPC
ACE_ROOTD:\OpenDDS\ACE_wrappers
TAO_ROOTD:\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个子工程。编译等待半小时左右。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/430104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡? 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡? Nginx负载均衡可以大…

Kubernetes 二进制部署 《easzlab / kubeasz项目部署》- 00-规划集群和配置介绍(二)

Kubernetes 二进制部署 - easzlab / kubeasz项目部署 00-规划集群和配置介绍1.首先创建集群配置实例2. 修改配置文件 在前一章,我们部署了一些基本环境,服务器,接下来,我们开始部署k8s相关组件 server list 类型IP主机名VIPgitl…

STM32 TIM编码器接口

单片机学习! 目录 文章目录 前言 一、编码器接口简介 1.1 编码器接口作用 1.2 编码器接口工作流程 1.3 编码器接口资源分布 1.4 编码器接口输入引脚 二、正交编码器 2.1 正交编码器功能 2.2 引脚作用 2.3 如何测量方向 2.4 正交信号优势 2.5 执行逻辑 三、编码器定时…

WebGIS开发0基础必看教程:地图瓦片在Canvas上的拼接显示

1.前言 在之前的五个章节中,我们在第一章节里介绍了WebGIS的基本框架和技术,第二章节里介绍了什么是瓦片行列号以及计算它的原因,第三章节里介绍了如何通过地理范围计算出这个范围内瓦片的行列号,第四和第五章节里介绍了在得到瓦…

如何让 JOIN 跑得更快?

JOIN 一直是数据库性能优化的老大难问题,本来挺快的查询,一旦涉及了几个 JOIN,性能就会陡降。而且,参与 JOIN 的表越大越多,性能就越难提上来。 其实,让 JOIN 跑得快的关键是要对 JOIN 分类,分…

C++max函数的使用案例20个

文章目录 1. **基本用法:**2. **比较浮点数:**3. **比较字符串:**4. **使用自定义比较函数:**5. **比较容器中的元素:**6. **使用std::initializer_list:**7. **变长参数版本(C11及以上&#xf…

c++的队列的用法

基本介绍 c的队列就是std::queue。 需要包含的头文件&#xff1a; #include<queue>queue就是先进先出队列 queue,就是队列&#xff0c;队列是一种容器适配器&#xff0c;专门设计用于在FIFO上下文中操作(先进先出)&#xff0c;其中将元素插入容器的一端并从另一端提…

广东Lenovo SR588服务器维修升级硬盘内存

本案例描述了对联想SR588服务器进行硬件升级的过程&#xff0c;包括更换固态硬盘作为系统盘&#xff0c;以及增加内存容量至128GB。升级后&#xff0c;服务器性能得到显著提升&#xff0c;同时通过重新配置RAID阵列和操作系统的重新安装&#xff0c;确保了系统的稳定性和数据的…

华为路由器 三层交换实现vlan通信 实验(附ensp实验源文件)

一、目标 通过三层交换实现vlan通信 二、网络配置 2.1 交换机1&#xff08;LSW1&#xff09;配置 # 创建两个vlan vlan 10 vlan 20# 配置g0/0/1端口 port link-type access port default vlan 10# 配置g0/0/2端口 port link-type access port default vlan 20# 配置g0/0/3端口…

STM32F1 - SPI读写Flash

Serial peripheral interface 1> 实验概述2> SPI硬件框图初始化程序 3> STM32的SPI通信时序3.1> 时序图3.2> 文字描述3.3> 注意事项3.4> 流程图表示3.5> 程序表示接收程序&#xff1a;发送程序&#xff1a; 4> SPI的4种模式5> W25Q128存储结构块…

开发知识点-Python-爬虫

爬虫 scrapybeautifulsoupfind_all find祖先/父节点兄弟节点nextpreviousCSS选择器属性值 attrsselect 后 class 正则使用字符串来描述、匹配一系列符合某个规则的字符串组成元字符使用grep匹配正则组与捕获断言与标记条件匹配正则表达式的标志 特定中文 匹配 scrapy scrapy内…

ssm+springboot音乐播放器网站mybatis+jsp

测试流程 &#xff08;1&#xff09; 登录系统、填写用户名、密码选择角色&#xff0c;主要内容&#xff1a;进行权限控制。 &#xff08;2&#xff09; 用户查看音乐信息、音乐资讯功能&#xff0c;主要是测试系统实用性、方便性。 &#xff08;3&#xff09; 信息修…

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka&#xff0c;然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…

在Java中处理JSON数据:Jackson与Gson库比较

引言 JSON&#xff0c;作为一种轻量级的数据交换格式&#xff0c;因其易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;而被广泛应用于网络通信和配置文件中。在Java中&#xff0c;有两个强大的工具帮助咱们处理JSON数据——Jackson和Gson。这两个库各有千秋…

Conda 快速入门,轻松拿捏 Python

一、简介 Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。Conda 是为 Python 程序创建的&#xff0c;适用于 Linux&#xff0c;OS X 和Windows&#xff0c;也可以打包和分发其他软件&…

teknoparrot命令行启动游戏

官方github cd 到teknoparrot解压目录 cd /d E:\mn\TeknoParrot2_cp1\GameProfiles启动游戏 TeknoParrotUi.exe --profile游戏配置文件游戏配置文件位置/UserProfiles,如果UserProfiles文件夹里没有那就在/GameProfiles,在配置文件里将游戏路径加入之间,或者打开模拟器设置 …

SpringCloud Alibaba 学习

一&#xff1a;SpringCloud Alibaba介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服 务的必需组件&#xff0c;方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba&…

mybatis不重复列插入例子详细说明

之前有做过不重复列插入的需求&#xff0c;当时是 在插入时判断 对应的列在数据库中有没有对应的数据 有则返回false 无则插入&#xff0c;但是这加大了数据库的查询负担 也增加了插入的时间&#xff0c;故今天研究一下 使用sql来简化了这一点 使用的知识点是 daul表 insert i…

提升效率的电脑定时工具,AutoOff软件推荐

今天最软库给大家带来一款非常实用的电脑定时关机软件在我们日常办公的时候有的时候需要上传一些资料由于我们下班了&#xff0c;我们想让他上传完成之后我们才离开这时候呢&#xff0c;就可以用到这款定时工具了。 我们可以设置中设置在几小时或者几分钟之后让电脑进行关机我们…

JDK、JRE、JVM的联系区别

在第一章中我们介绍了JDK的下载配置与IDEA开发环境的下载安装&#xff0c;以及分别在这两个&#xff08;电脑本机和IDEA&#xff09;环境上执行了我们的第一个源程序。通过直观的使用&#xff0c;我们可以感受到集成开发环境的便捷。 大家也更加对JDK有了直观的了解&#xff0c…