Fast DDS入门三、Fast DDS在Linux平台的编译安装

Fast DDS在Linux平台比在Windows平台的编译安装简单的多,下面详述其编译安装过程。

1 Fast DDS动态库的编译安装

本节介绍从源代码在Linux环境中安装FastDDS的说明。将安装以下软件包:

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

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

fastrtps,Fast DDS库的核心库。

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

1.1环境要求

从源代码在Linux环境中安装eProsimaFast DDS需要在系统中安装以下工具:

CMake, g++, pip3, wget and git

这些软件包提供了从命令行安装eProsima Fast DDS及其依赖项所需的工具。使用相应Linux发行版的包管理器安装CMake、g++、pip3、wget和git。例如,在Ubuntu上使用命令:

sudo apt install cmake g++ python3-pipwget git

1.2 Fast DDS动态库相关依赖

eProsima Fast DDS在Linux环境中从源代码安装时具有以下依赖性:

(1)Asio andTinyXML2 libraries

Asio是一个用于网络和低级I/O编程的跨平台C++库,它提供了一致的异步模型。TinyXML2是一个简单、小巧、高效的C++XML解析器。使用相应Linux发行版的软件包管理器安装这些库。例如,在Ubuntu上使用命令:

sudo apt install libasio-devlibtinyxml2-dev

(2)OpenSSL

OpenSSL是一个用于TLS和SSL协议的强大工具包,也是一个通用密码库。使用相应Linux发行版的软件包管理器安装OpenSSL。例如,在Ubuntu上使用命令:

sudo apt install libssl-dev

(3)Libp11 andSoftHSM libraries

Libp11为OpenSSL提供PKCS#11支持。这是一个可选的依赖项,仅当eprosima Fast DDS与安全性和PKCS#11 URI一起使用时才需要。

使用相应Linux发行版的软件包管理器安装libp11。例如,在Ubuntu上使用命令:

sudo apt install libp11-devlibengine-pkcs11-openssl

SoftHSM是HSM(硬件安全模块)的软件实现。如果eProsima Fast DDS测试已激活,并且系统上安装了libp11,则还需要SoftHSM来运行PKCS#11功能的测试。

使用相应Linux发行版的软件包管理器安装SoftHSM。例如,在Ubuntu上使用命令:

sudo apt install softhsm2

请注意,softhsm2软件包创建了一个名为softhsm的新组。为了授予对HSM模块的访问权限,用户必须属于该组。

sudo usermod -a -G softhsm <user>

OpenSSL通过其引擎功能访问HSM和其他硬件设备。为了设置新引擎,必须更新OpenSSL配置文件(通常为/etc/ssl/OpenSSL.cnf),指定libp11和硬件模块(此处为SoftHSM)动态库的位置。

使用p11kit可以避免此配置步骤,它允许OpenSSL在运行时查找PKCS#11设备,而无需静态配置。此工具包通常通过Linux发行包管理器提供。例如,在Ubuntu上:

sudo apt installlibengine-pkcs11-openssl

安装后,要检查p11,可以使用以下方法查找SoftHSM模块:

p11-kit list-modules

为了检查OpenSSL是否能够访问PKCS#11引擎,请使用:

openssl engine pkcs11 -t

(4)GTest

GTest是C++的单元测试库。默认情况下,eProsima Fast DDS不编译测试。调用colcon或CMake时,可以使用适当的CMake配置选项激活它们。也可以将Gtest存储库添加到工作区目录中。

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

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

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

(1)创建一个Fast DDS目录,用于下载和构建eProsima Fast DDS及其依赖项:

mkdir ~/Fast-DDS

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

  • cd ~/Fast-DDS

  • mkdir foonathan_memory_vendor/build

  • cdfoonathan_memory_vendor/build

  • cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install-DBUILD_SHARED_LIBS=ON

cmake --build .--target install

  • cd ~/Fast-DDS

  • mkdir Fast-CDR/build

  • cd Fast-CDR/build

  • cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install

cmake --build .--target install

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

cd ~/Fast-DDS

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

mkdir Fast-DDS/build

cd Fast-DDS/build

cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install

cmake --build . --target install

注意:

  1. 默认情况下,eProsima Fast DDS不编译测试。但是,可以通过下载和安装Gtest来激活它们。

  1. CMAKE_INSTALL_PREFIX为编译后,默认要安装的路径。

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

  1. Fast DDS,以上命令行不能成功编译Fast DDS,因为需要配置其依赖的很多库路径(上述已经下载的库等)。因此需要启动CMake-GUI界面程序,图形界面配置这些依赖库路径。CMake-GUI界面程序启动后选择好Fast-DDS源码目录和Build目录后,先Configure,后Generate。Configure过程中,会弹出缺少相关依赖库提示,人工选择前面已经下载安装的依赖库路径,Configure成功后,就可以Generate生成完整依赖工程项目(vscode/codeblocks等),然后在开发工具中build生成、install安装相关动态库so文件、可执行文件、头文件等。也可以在CMake-GUI配置生成makefile文件后,在linux命令行下make、install.

  1. FastDDS的CMake选项很多,一般选择默认选择进行编译,就够用了。如果定制化编译生成,读者可以有选择的配置,详细介绍请参考上一篇文章:《FastDDS入门二、FastDDS在Windows平台的编译安装》。

2 Fast DDS-Gen编译安装

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语言构建应用程序和组件的开发环境。要安装Java JDK,请运行:

sudo apt install openjdk-8-jdk

Gradle是一个开源的构建自动化工具。首选下载并安装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

注意:如果编译过程中出现错误或您不希望安装gradle,则会包含一个可执行脚本,该脚本将为编译步骤临时下载gradle。

./gradlew assemble

Fast DDS Gen文件夹包含以下软件包:

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

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

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼爱幻想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值