Fast DDS在Linux平台比在Windows平台的编译安装简单的多,下面详述其编译安装过程。
本节介绍从源代码在Linux环境中安装FastDDS的说明。将安装以下软件包:
foonathan_memory_uvendor,一个STL兼容的C++内存分配器库。
fastcdr,一个根据标准CDR序列化机制进行序列化的C++库。
fastrtps,Fast DDS库的核心库。
首先,需要满足下面详述的需求和依赖性。之后,用户可以选择是否遵循colcon或CMake安装说明,本文介绍采用CMake在Linux平台编译安装FastDDS的方法。
从源代码在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
eProsima Fast DDS在Linux环境中从源代码安装时具有以下依赖性:
Asio and TinyXML2 libraries
OpenSSL
Libp11 and SoftHSM libraries[可选]
Gtest [可选]
(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
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
本节介绍如何在本地或全局使用CMake编译eProsima Fast DDS。
(1)创建一个Fast DDS目录,用于下载和构建eProsima Fast DDS及其依赖项:
mkdir ~/Fast-DDS
(2)克隆以下依赖项并使用CMake编译它们。
Foonathanmemory
cd ~/Fast-DDS
git clone https://github.com/eProsima/foonathan_memory_vendor.git
mkdir foonathan_memory_vendor/build
cdfoonathan_memory_vendor/build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install-DBUILD_SHARED_LIBS=ON
cmake --build .--target install
FastCDR
cd ~/Fast-DDS
git clone https://github.com/eProsima/Fast-CDR.git
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
注意:
默认情况下,eProsima Fast DDS不编译测试。但是,可以通过下载和安装Gtest来激活它们。
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生成完整依赖工程项目(vscode/codeblocks等),然后在开发工具中build生成、install安装相关动态库so文件、可执行文件、头文件等。也可以在CMake-GUI配置生成makefile文件后,在linux命令行下make、install.
FastDDS的CMake选项很多,一般选择默认选择进行编译,就够用了。如果定制化编译生成,读者可以有选择的配置,详细介绍请参考上一篇文章:《FastDDS入门二、FastDDS在Windows平台的编译安装》。
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辅助库)。
为了编译Fast DDS Gen,需要在系统中安装以下软件包:
Java JDK
Gradle
JDK是一个使用Java语言构建应用程序和组件的开发环境。要安装Java JDK,请运行:
sudo apt install openjdk-8-jdk
Gradle是一个开源的构建自动化工具。首选下载并安装Gradle的最新稳定版本。
满足上述要求后,按照以下步骤编译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环境变量。