Fast DDS入门二、Fast DDS在Windows平台的编译安装

2023-11-07

Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

1 Fast DDS动态库的编译安装

本节提供了在Windows环境中从源代码安装Fast DDS的说明。将安装以下软件包:

foonathan_memory_uvendor,一个STL兼容的C++内存分配器库。

fastcdr,一个根据标准CDR序列化机制进行序列化的C++库。

fastrtps,eProsimaFast DDS库的核心库。

首先,需要满足下面详述的环境要求和依赖性。之后,用户可以选择是否遵循colcon或CMake安装说明,本文介绍采用CMake在Windows平台编译安装FastDDS的方法。

1.1环境要求

在Windows环境中从源安装FastDDS需要在系统中安装以下工具:

Visual Studio

Chocolatey

CMake、pip3、wget和git

Gtest[可选]

1.1.1 Visual Studio

Visual Studio需要在系统中具有C++编译器。为此,请确保在Visual Studio安装过程中检查“使用C++进行桌面开发”选项。

如果已安装Visual Studio,但未安装Visual C++可再发行软件包,请打开Visual Studio并转到“工具”->“获取工具和功能”,然后在“工作负载”选项卡中启用C++桌面开发。最后,单击右下角的“修改”。

1.1.2 Chocolatey

Chocolatey是一个Windows软件包管理器。需要安装eProsima Fast DDS的一些依赖项。直接从网站下载并安装。

https://chocolatey.org/

1.1.3 CMake、pip3、wget和git

这些软件包提供了从命令行安装Fast DDS及其依赖项所需的工具。按照各自网站中的详细说明下载并安装CMake、pip3、wget和git。安装后,从“编辑系统环境变量”控制面板将可执行文件的路径添加到path。

它们的下载地址:

CMake, pip3, wget, git

1.1.4 GTest

GTest是C++的单元测试库。默认情况下,Fast DDS不编译测试。调用CMake时,可以使用适当的CMake配置选项激活它们。有关详细信息,请参阅CMake选项部分。这里也将Gtest存储库添加到工作区目录中。

git clone https://github.com/google/googletest src/googletest-distribution

1.2 Fast DDS动态库相关依赖

Fast RTPS在Windows环境中从源安装时具有以下依赖关系:

Asio和TinyXML2库

OpenSSL

1.2.1 Asio和TinyXML2库

Asio是一个用于网络和低级I/O编程的跨平台C++库,它提供了一致的异步模型。TinyXML2是一个简单、小巧、高效的C++XML解析器。可以直接从以下链接下载:

下载这些包后,使用PowerShell打开管理shell并执行以下命令:

choco install -y -s <PATH_TO_DOWNLOADS>asio tinyxml2

其中<PATH_TO_DOWNLOADS>是这些包已下载到的文件夹。

1.2.2 OpenSSL

OpenSSL是一个用于TLS和SSL协议的强大工具包,也是一个通用密码库。通过此链接下载并安装最新的WindowsOpenSSL版本。安装后,添加指向安装根目录的环境变量OPENSSL_ROOT_DIR。

例如:

OPENSSL_ROOT_DIR=C:\Program Files\OpenSSL-Win64

1.3 Cmake方式编译安装FastDDS动态库

本节介绍如何在本地或全局使用CMake编译eProsima Fast DDS。

(1)打开命令提示符,创建一个FastDDS目录,在其中下载和构建Fast DDS及其依赖项:

mkdir %USERPROFILE%\Fast DDS

注意:%USERPROFILE%是指你要自定义创建的FastDDS根目录,所有文件及文件夹都在该目录下,便于管理。

(2)克隆以下依赖项并使用CMake编译它们。

Fast DDS依赖于Foonathanmemory。为了简化依赖性管理,eProsima提供了一个Foonathan memory vendor,如果在系统中找不到库,可以下载并构建特定版本的Foonathan memory。以下为CMake编译安装过程:

cd %USERPROFILE%\Fast-DDS

git clone https://github.com/eProsima/foonathan_memory_vendor.git

cd foonathan_memory_vendor

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=%USERPROFILE%/Fast-DDS/install ..

cmake --build . --target install

Fast CDR是Fast DDS以来的序列化库,以下为CMake编译安装过程:

cd %USERPROFILE%\Fast-DDS

git clone https://github.com/eProsima/Fast-CDR.git

cd Fast-CDR

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=%USERPROFILE%/Fast-DDS/install ..

cmake --build . --target install

(3)安装所有依赖项后,安装eProsima Fast DDS:

cd %USERPROFILE%\Fast-DDS

git clone https://github.com/eProsima/Fast-DDS.git

cd Fast-DDS

mkdir build && cd build

cmake -DCMAKE_INSTALL_PREFIX=%USERPROFILE%/Fast-DDS/install ..

cmake --build . --target install

注意:CMAKE_INSTALL_PREFIX为编译后,默认要安装的路径。

Foonathan memory和Fast-CDR直接采用上述命令行就可以编译安装成功。命令行下编译,最好选择好是执行Debug编译还是Release编译,以便所有互相依赖的动态库能够保持一致,不会发生调用冲突。不太了解CMake的,需要先学习一下CMake。

Fast DDS,以上命令行不能成功编译Fast DDS,因为需要配置其依赖的很多库路径(上述已经下载的库等)。因此需要启动CMake-GUI界面程序,图形界面配置这些依赖库路径。CMake-GUI界面程序启动后选择好Fast-DDS源码目录和Build目录后,先Configure,后Generate。Configure过程中,会弹出缺少相关依赖库提示,人工选择前面已经下载安装的依赖库路径,Configure成功后,就可以Generate生成完整的Fast RTPS的vs解决方案(sln文件)。最后,打开sln解决方案,在vs编译界面下,选择Build项目生成将编译生成所有项目,编译生成动态库、应用程序成功后,选择Install项目生成将安装FastDDS头文件、lib、dll、exe到默认安装的路径下,这些文件就可以给其他工程导入使用FastDDS进行开发了。

Fast DDS的CMake-GUI配置如下所示:

Fast DDS的CMake选项很多,一般选择默认选择进行编译,就够用了。如果定制化编译生成,读者可以有选择的配置,以下是详细介绍。

(4)Fast DDS的CMake选项

Fast DDS提供了许多CMake选项,用于更改Fast DDS的行为和配置。这些选项允许用户通过在CMake执行时将这些选项定义为ON/OFF来启用/禁用某些FastDDS设置。这里介绍一些主要的配置选项:

EPROSIMA_INSTALLER选项:

为Fast DDS创建Windows二进制installer安装程序,默认为OFF。具体来说,它将添加到要安装的组件(CPACK_components_ALL)对应的库到Microsoft VisualC++编译器(MSVC)。设置EPROSIMA_INSTALLER设置为ON对其他选项有以下影响:

  • EPROSIMA_BUILD is set to ON.

  • BUILD_DOCUMENTATION is set to ON.

  • INSTALL_EXAMPLES is set to ON.

EPROSIMA_BUILD选项:

激活内部Fast DDS构建。如果EPROSIMA_INSTALLER为ON,则EPROSIMA_BUILD也被设置为on。将EPROSIMA_BUILD设置为ON对其他选项的影响:

  • INTERNAL_DEBUG is set to ON.

  • COMPILE_EXAMPLES is set to ON if EPROSIMA_INSTALLER is OFF.

  • THIRDPARTY_fastcdr is set to ON if it wasnot set to FORCE.

  • THIRDPARTY_Asio is set to ON if it wasnot set to FORCE.

  • THIRDPARTY_TinyXML2 is set to ON if it wasnot set to FORCE.

  • THIRDPARTY_android-ifaddrs is set to ON if it wasnot set to FORCE.

  • EPROSIMA_BUILD_TESTS is set to ON if EPROSIMA_INSTALLER is OFF.

BUILD_SHARED_LIBS选项:

将内部库构建为共享库,即导致CMake函数add_library()来创建共享库。除非库被显式添加为静态库。

SECURITY选择:

激活Fast DDS安全模块。安全模块比较复杂,默认设置为OFF。

NO_TLS选项:

禁用传输层安全性(TLS)支持。可参阅TLSover TCP有关Fast DDS TLS配置的更多信息。

SHM_TRANSPORT_DEFAULT选项:

将共享内存传输(SHM)添加到默认传输。

FASTDDS_STATISTICS选项:

启用快速DDS统计模块,该模块目前还不成熟。

COMPILE_EXAMPLES选项:

构建Fast DDS示例。这些示例可以在Fast DDS GitHub存储库找到。

INSTALL_EXAMPLES选项:

安装Fast DDS示例,即将FastDDS示例添加到要安装的组件(CPACK_components_ALL)。

STRICT_REALTIME选项:

启用严格的实时行为。

SQLITE3_SUPPORT选项:

构建SQLITE3插件,该插件启用TRANSIENT_DURABILITY_QOS和DurabilityQosPolicyKind的PERSISENT_DURABILITY_QOS选项,因此能够提供持久性服务。

THIRDPARTY_fastcdr选项:

如果在系统的其他地方未找到Fast CDR,ON将激活该内部库的使用。FORCE激活内部Fast CDR第三方库的使用而不管它是否可以在系统中的其他地方找到。OFF禁用内部Fast CDR第三方库的使用。如果未设置为FORCE,则如果EPROSIMA_BUILD为ON,则设置为ON。

THIRDPARTY_Asio选项:

如果在系统的其他地方未找到Asio,ON将激活该内部库的使用。FORCE激活内部Asio第三方库的使用而不管它是否可以在系统中的其他地方找到。OFF禁用内部Asio第三方库的使用。如果未设置为FORCE,则如果EPROSIMA_BUILD为ON,则设置为ON。

THIRDPARTY_TinyXML2选项:

如果在系统的其他地方未找到TinyXML2,ON将激活该内部库的使用。FORCE激活内部TinyXML2第三方库的使用而不管它是否可以在系统中的其他地方找到。OFF禁用内部TinyXML2第三方库的使用。如果未设置为FORCE,则如果EPROSIMA_BUILD为ON,则设置为ON。

THIRDPARTY选项:

除非另有规定,否则就是设置所有第三方的子模块THIRPARTY_fastcdr、THIRPARTEY_Asio,

THIRPARTY_TinyXML2和THIRPARty_android-ifaddrs。

LOG_CONSUMER_DEFAULT选项:

选择日志记录模块的默认日志使用者。AUTO的行为与STDOUT相同。

LOG_NO_INFO选项:

停用信息日志级别。

FASTDDS_ENFORCE_LOG_INFO选项:

即使在非调试配置上也启用信息日志级别。此选项仅在LOG_NO_INFO设置为OFF时生效,这可能会对性能造成重大影响。

GTEST_INDIVIDUAL选项:

激活GoogleTest测试的单独构建,因为FastDDS测试是使用GoogleTest框架实现的。但是,如果EPROSIMA_BUILD设置为ON,则编译测试。因此,如果GTEST_INDIVIDUAL为OFF,而EPROSIMA-BUILD为ON,测试将作为单个主要测试进行处理。

FASTRTPS_API_TESTS选项:

支持使用Fast DDS RTPS层API构建用于验证RTPS通信的黑盒测试。

PERFORMANCE_TESTS选项:

激活性能测试的构建,视频测试除外,视频测试需要将performance_tests和video_tests设置为ON。

2 Fast DDS-Gen编译安装

eProsimaFast DDS Gen是一个Java应用程序,它使用IDL(接口定义语言)文件中定义的数据类型生成Fast DDS源代码。生成的源代码可以用于任何Fast DDS应用程序中,以定义主题的数据类型,稍后将用于发布或订阅。Fast DDS通过两个类定义Topic中交换的数据类型:TypeSupport和TopicDataType。TopicDataType描述发布和订阅之间交换的数据类型,即与Topic对应的数据;而TypeSupport封装TopicDataType的一个实例,提供注册该类型以及与发布和订阅交互所需的功能。

要声明结构化数据,必须使用IDL格式。IDL是一种规范语言,由OMG(对象管理组)制定,它以独立于语言的方式描述接口,允许不同语言的软件组件之间进行通信。Fast DDS Gen工具读取IDL文件并解析OMG IDL规范的子集,以生成数据序列化的源代码。此子集包括通过IDL定义数据类型中包含的数据类型描述。其余的文件内容将被忽略。

Fast DDS Gen生成的源代码使用Fast CDR,这是一个C++11库,提供数据序列化和编码机制。因此,如RTPS标准中所述,当发送数据时,使用相应的公共数据表示(CDR)对数据进行序列化和编码。CDR传输语法是代理间传输的低级表示,从OMGIDL数据类型映射到字节流。

Fast DDS Gen的主要功能是在不了解串行化或反序列化机制的情况下促进DDS应用程序的实现。使用Fast DDS Gen,还可以与使用Fast DDS库的发布者和订阅者一起生成DDS应用程序的C++源代码(请参阅构建发布/订阅应用程序)。Fast DDS Gen还可以为数据类型生成Python绑定,以便在基于Python的Fast DDS应用程序中使用它们(请参见构建Python辅助库)。

2.1环境要求

为了编译Fast DDS Gen,需要在系统中安装以下软件包:

  • Java JDK

  • Gradle

JDK是一个使用Java语言构建应用程序和组件的开发环境。按照Oracle网站中给出的步骤下载并安装它。

Gradle是一个开源的自动化构建工具,首选下载并安装Gradle的最新的稳定版本。

Java JDK和Gradle可去对应官方网站下载。

2.2编译安装Fast DDS-Gen

满足上述要求后,按照以下步骤安装Fast DDS Gen:

cd ~

git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git

cd Fast-DDS-Gen

gradle assemble

编译成功后Fast DDS Gen文件夹包含以下软件包:

share/fastddsgen,生成的Java应用程序所在的位置。

scripts,包含一些用户友好的脚本。注意:要使这些脚本可以从任何目录访问,请将脚本文件夹路径添加到path环境变量。

CSDN下载:免费下载Fast DDS编译后的动态库

github下载:git clone https://github.com/FantasticSaltedFish/Fast-DDS.git

Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fast DDS入门二、Fast DDS在Windows平台的编译安装 的相关文章

  • 逐梦C++补遗篇之一:cout与cerr的区分

    逐梦C 补遗篇之一 cout与cerr的区分 1 从定义看区别 cout 标准输出流 带缓冲 默认输出目的地为屏幕 可以被重定向 cerr 标准错误输出 不带缓冲 输出目的地为屏幕 一般不被重定向 缓冲 带缓冲 就是系统会为你分配一个缓冲区
  • 精彩观点一览

    7月20日下午 大模型的发展路径论坛于北京成功举办 大模型的发展路径论坛作为2023中国互联网大会的分论坛之一 由中国互联网协会人工智能工作委员会承办 中国信通院云计算与大数据研究所 华为云大数据与AI业务协办 并得到阿里云 北京智源研究院

随机推荐

  • 理解什么是 JMM

    理解什么是 JMM 本文已收录至 GitHub https github com yifanzheng java notes Java 虚拟机是一个完整的计算机的一个模型 因此这个模型自然也包含一个内存模型 Java 内存模型 也就是说 J
  • 最短路算法——Dijkstra

    Dijkstra 在大多数最短路径问题中 Dijkstra 算法是最常用 效率最高的 它是一种 单源 最短路径算法 一次计算能得到从一个起点 s 到其他所有点的最短距离长度 最短路径的途径点 一 Dijkstra的算法思想 Dijkstra
  • Upload LABS Pass-6

    第六关在后端使用了黑名单 并过滤了大小写和点 但未过滤空格 我们使用代理抓包在后缀名中添加空格 即可绕过黑名单 准备一个 6 php 文件 内容为一句话木马 上传 6 php 文件 并开启代理 此处使用 Burp Suite 拦截请求 在文
  • python旋转矩阵_python将四元数变换为旋转矩阵

    import numpy as np from autolab core import RigidTransform 写上用四元数表示的orientation和xyz表示的position orientation y 0 697127881
  • java代码的四层结构

    一 util包 放共同类的包 整个项目中 可以共用的一些代码 例如 一些常用的字符串的非空验证 身份证或者电话号码的正则验证等等 1 JDBC类功能的封装 package util import java io IOException im
  • VsCode中修改/重置gitlab远程仓库地址

    A 更换git远程仓库地址 1 查看当前remotes git remote v 2 修改remotes git remote set url origin https github com test test git B 重置git远程仓
  • Spring Boot中单元测试数据库的切换策略

    问题缘起 单元测试默认情况下使用嵌入式数据库 例如H2 如果要切换为MySQL 直接移除H2驱动 在application properties yml 配置相应的连接信息 都不起作用 那该如何切换配置呢 单元测试数据库 在SpringBo
  • 如何给Python写注释

    给程序写注释是一个很好的习惯 提高程序的可读性 写注释是不可少的步骤 Python与其他语言一样提供了两种注释方法 单行注释和多行注释 单行注释 Python中使用 进行单行注释 这里是一个单行注释 print 翔宇亭IT乐园 www bi
  • ap忘记管理ip地址怎么办_路由器刷集客固件,低成本实现AC+AP组网

    某讯K2T路由器刷集客固件 可以作为无线AP使用 多个K2T实现无缝漫游功能 通过微AC或者ESXI安装集客AC可以实现对AP进行管理 低成本的实现AC AP组网 确定版本号140版本 158以上版本的需要拆机 操作步骤 第一步 开启tel
  • 2019中国城市排名出炉——2019新一线城市有没有你的家乡!?

    新一线城市研究所在上海发布 2019城市商业魅力排行榜 新一线城市研究所收集了170个主流消费品牌的商业门店数据 18家各领域头部互联网公司的用户行为数据和数据机构的城市大数据 对337个中国地级及以上城市进行了评估 排行榜沿用了上一年的五
  • java集合框架

    这图画的真洒脱 光一个stack就有很多可探索了
  • 那些年踩过的坑——服务器中文路径

    从11年学编程至今已有十个年头 其实有时候也很后悔选择这个专业 整日和电脑相偎相依 人的思维和沟通能力也趋向机器 和别人聊天也不知道怎么开口 算法的一个评定标准就是以最少的语句实现所需的功能 但和别人聊天则不能这样 太直接简单会让人变得无趣
  • 总结了9款Mac端超好用的免费开源软件,你还有更好的推荐吗?

    与Windows相比 Mac上的软件 不仅不稀缺 并且大多数都更加精致 还没有乱七八糟烦人的弹窗骚扰 所以 本期就为大家盘点盘点Mac上有超好用的免费开源神器 1 Tincta 官网 https codingfriends github i
  • glibc堆内存管理

    glibc堆内存管理 背景 应用出现SIGABRT crash 报错信息为 malloc invalid size unsorted 即是在应用调用malloc分配内存时出现异常导致的crash 管理结构 进程虚拟地址空间被划分为代码段 数
  • eclipse下JNI的初步实现

    eclipse下JNI的初步实现 JNI java native interface 为java应用程序提供调用本地方法的接口 The standard Java class library may not support the plat
  • build打包后怎么查看源码 vue_vue2源码解析一:打包与构建流程

    本系列文章 基于vue 2 6 11进行解析 不追究每行代码分析清楚 但求把握大体的重点 比如源码构建流程 如何实现数据双向绑定 如何解析模板 如何解析一个组件的data method computed等属性 如何实现在weex web等多
  • LeetCode-1326. Minimum Number of Taps to Open to Water a Garden

    There is a one dimensional garden on the x axis The garden starts at the point 0 and ends at the point n i e The length
  • 深圳大学软件工程MOOC章节测试答案

    第一章 章节测试 一 单选题 共 90 00 分 1 下列 不是软件工程方法学中的要素 A 方法 B 工具 C 程序 D 过程 满分 10 00 分 得分 10 00 分 你的答案 C 教师评语 暂无 2 软件工程方法学的目的是 使软件生产
  • RK3588s imx415相机适配及ISP调优系列(三)--- RKISP调试环境配置

    经过上篇的相机配置后 两个mipi相机已经可以正常出图了 其实对于rk系列如何配置mipi相机 网上已有不少相关资料均可参考借鉴 RK3588s imx415相机适配及ISP调优系列 一 RK3588s imx415相机适配及ISP调优系列
  • Fast DDS入门二、Fast DDS在Windows平台的编译安装

    Fast DDS入门五 在Windows平台创建一个简单的Fast DDS示例程序 1 Fast DDS动态库的编译安装 本节提供了在Windows环境中从源代码安装Fast DDS的说明 将安装以下软件包 foonathan memory