fastdds编译教程
Linux源码编译
创建一个 Fast-DDS 目录,用于下载并构建 eProsima Fast DDS 及其依赖项:
1
mkdir ~/Fast-DDS
克隆以下依赖项,并使用 CMake 编译它们。
Foonathan memory
1 2 3 4 5 6
cd ~/Fast-DDS git clone https://github.com/eProsima/foonathan_memory_vendor.git mkdir foonathan_memory_vendor/build cd foonathan_memory_vendor/build cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON cmake --build . --target install
Fast DDS
1 2 3 4 5 6
cd ~/Fast-DDS git clone --recurse-submodules https://github.com/eProsima/Fast-DDS.git fastdds mkdir fastdds/build cd fastdds/build cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install -DCMAKE_BUILD_TYPE=Release -DTHIRDPARTY=FORCE cmake --build . --target install
Fast DDS-Gen 安装
本节介绍如何在 Linux 环境下从源代码安装 Fast DDS-Gen。Fast DDS-Gen 是一个 Java 应用程序,可使用 IDL 文件中定义的数据类型生成源代码。有关更多信息,请参阅 Introduction 章节,以及 eProsima 产品兼容性 部分中提供的 Fast DDS 版本兼容矩阵。
需求
Fast DDS-Gen 使用 Gradle 构建。Gradle 是一个开源的构建自动化工具,运行时需要 Java 版本(请参阅 Gradle-Java 兼容性矩阵)。
[!IMPORTANT]
尽管早期版本的 Gradle 支持 Java 8,但自 v2.4.0 版本起,Fast DDS-Gen 不再支持 Java 11 之前的 Java 版本。
Fast DDS-Gen 在 v2.2.0 版本中引入了对 Gradle 7 的支持。但尚未支持 Gradle 8。
[!TIP]
关于 Fast DDS-Gen 的相关版本信息,请参阅 Library dependencies 部分。
Java JDK
JDK 是用于使用 Java 语言构建应用程序和组件的开发环境。Java 提供多个版本,例如,安装 Java 11 JDK 的命令如下:
1
sudo apt install openjdk-11-jdk
[!NOTE]
Fast DDS-Gen 支持 Java 11 至 Java 19 的版本。
编译 Fast DDS-Gen
为了编译 Fast DDS-Gen,仓库中包含一个可执行脚本,该脚本将在编译阶段临时下载 Gradle。请按照以下步骤构建 Fast DDS-Gen:
[!NOTE]
如果已按照 Colcon 安装步骤安装了 Fast DDS,请跳过克隆 Fast DDS-Gen 仓库的步骤,因为它已经包含在 Colcon 工作空间的
src
目录中。
1
2
3
4
cd ~/Fast-DDS
git clone --recursive https://github.com/eProsima/Fast-DDS-Gen.git fastddsgen
cd fastddsgen
./gradlew assemble
[!NOTE]
如果系统中已安装受支持的 Gradle 版本,也可以直接运行以下命令进行构建:
1
gradle assemble
内容
Fast-DDS-Gen 文件夹包含以下包:
share/fastddsgen
:生成的 Java 应用程序位置。scripts
:包含一些用户友好的脚本。
[!NOTE]
为了在任何 shell 会话和目录中都能访问这些脚本,请将
scripts
文件夹路径添加到PATH
环境变量中。
CMake 选项
eProsima Fast DDS 提供了许多 CMake 选项,用于更改 Fast DDS 的行为和配置。这些选项允许用户在执行 CMake 时通过设置选项为 ON 或 OFF 来启用/禁用某些 Fast DDS 功能。本节的结构如下:首先描述 Fast DDS 的一般配置 CMake 选项;然后介绍与第三方库相关的选项;最后定义用于构建 Fast DDS 测试的可能选项。
常规选项
以下列出了 Fast DDS 的常规配置 CMake 选项,包括它们的描述以及对其他选项的依赖关系。
选项 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
EPROSIMA_INSTALLER | 创建用于 Windows 二进制安装包的构建。具体来说,它会将与 Microsoft Visual C++ 编译器 (MSVC) 对应的库添加到安装组件列表(CPACK_COMPONENTS_ALL )中。启用此选项(设为 ON)会导致以下选项自动设为 ON:- EPROSIMA_BUILD - BUILD_DOCUMENTATION - INSTALL_EXAMPLES | ON, OFF | OFF |
EPROSIMA_BUILD | 启用 Fast DDS 的内部构建。如果 EPROSIMA_INSTALLER 为 ON,则此选项也为 ON。启用此选项会导致以下选项自动设为 ON:- INTERNAL_DEBUG - 如果 EPROSIMA_INSTALLER 为 OFF,则 COMPILE_EXAMPLES 为 ON - 如果未强制设置,多个第三方库选项(如 THIRDPARTY_fastcdr )为 ON | ON, OFF | OFF |
BUILD_SHARED_LIBS | 将内部库构建为共享库,即使 add_library() 函数创建共享库。除非显式指定为静态库,否则所有库均构建为共享库。 | ON, OFF | ON |
SECURITY | 启用 Fast DDS 的安全模块。有关安全模块的更多信息,请参阅安全。 | ON, OFF | OFF |
NO_TLS | 禁用传输层安全性 (TLS) 支持。有关 Fast DDS TLS 配置的更多信息,请参阅TLS over TCP。 | ON, OFF | OFF |
SHM_TRANSPORT_DEFAULT | 将共享内存传输 (SHM) 添加到默认传输方式。有关 Fast DDS SHM 传输的更多信息,请参阅SHM。 | ON, OFF | ON |
FASTDDS_STATISTICS | 启用 Fast DDS 统计模块。有关此模块的更多信息,请参阅统计模块。 | ON, OFF | ON |
COMPILE_EXAMPLES | 构建 Fast DDS 示例。如果 EPROSIMA_BUILD 为 ON 且 EPROSIMA_INSTALLER 为 OFF,则此选项为 ON。示例可以在 eProsima Fast DDS 的 GitHub 仓库中找到。 | ON, OFF | OFF |
INSTALL_EXAMPLES | 安装 Fast DDS 示例,即将示例添加到安装组件列表(CPACK_COMPONENTS_ALL )。如果 EPROSIMA_INSTALLER 为 ON,则此选项为 ON。 | ON, OFF | OFF |
BUILD_DOCUMENTATION | 使用 Doxygen 创建 Fast DDS API 参考文档。如果 EPROSIMA_INSTALLER 为 ON 或 CHECK_DOCUMENTATION 为 ON,则此选项为 ON。 | ON, OFF | OFF |
CHECK_DOCUMENTATION | 从 Read the Docs 媒体服务器下载 Fast DDS 文档。文档文件会解压到 doc/manual 目录,更新任何已存在的版本。如果此选项为 ON,则 BUILD_DOCUMENTATION 也会设为 ON。 | ON, OFF | OFF |
STRICT_REALTIME | 启用严格的实时行为。有关 Fast DDS 实时配置的更多信息,请参阅实时使用案例。 | ON, OFF | OFF |
SQLITE3_SUPPORT | 构建 SQLITE3 插件,支持 TRANSIENT_DURABILITY_QOS 和 PERSISTENT_DURABILITY_QOS 配置,这些是持久性服务的选项。 | ON, OFF | ON |
APPEND_PROJECT_NAME_TO_INCLUDEDIR | 启用后,头文件会安装到以 fastdds 结尾的路径中。这可以避免在合并的 catkin、ament 或 colcon 工作空间中覆盖此包时的目录搜索顺序问题。 | ON, OFF | OFF |
USE_THIRDPARTY_SHARED_MUTEX | 启用后,将使用自定义的 shared_mutex 实现,而非标准库中的实现。Fast DDS 要求使用 PTHREAD_RWLOCK_PREFER_READER_NP ,这是其死锁预防逻辑所依赖的优先级策略。此选项还可以避免 GCC/Clang STL 实现中的错误报告。 | ON, OFF | OFF (Linux & Mac), ON (Windows) |
SANITIZER | 添加代码运行时检测功能。支持的选项包括:- Thread :启用线程检测工具 - Address :启用地址检测工具 | OFF, Address, Thread | OFF |
日志选项
Fast DDS 使用其可配置的日志模块,支持不同的详细程度日志级别。有关更多信息,请参阅日志记录。 可以通过以下 Fast DDS CMake 参数配置日志模块。
选项 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
LOG_CONSUMER_DEFAULT | 为日志模块选择默认的日志消费者。AUTO 的行为与 STDOUTERR 相同。有关更多信息,请参阅日志消费者。 | AUTO, STDOUT, STDOUTERR | AUTO |
LOG_NO_INFO | 禁用 Info 日志级别。如果 Fast DDS 在单配置生成器中以调试模式构建,则默认值为 OFF。 | ON, OFF | ON |
FASTDDS_ENFORCE_LOG_INFO | 即使在非调试配置中也启用 Info 日志级别。此选项仅在 LOG_NO_INFO 设置为 OFF 时生效。请注意,这可能会显著影响性能。 | ON, OFF | OFF |
LOG_NO_WARNING | 禁用 Warning 日志级别。 | ON, OFF | OFF |
LOG_NO_ERROR | 禁用 Error 日志级别。 | ON, OFF | OFF |
INTERNAL_DEBUG | 启用日志消息的编译(请参阅禁用日志模块)。此外,如果 EPROSIMA_BUILD 为 ON,则此选项也为 ON。 | ON, OFF | OFF |
ENABLE_OLD_LOG_MACROS | 启用旧日志宏(请参阅旧日志宏禁用)。 | ON, OFF | ON |
第三方库选项
Fast DDS 使用 eProsima FastCDR 库实现序列化机制。此外,Fast DDS 依赖两个外部库:Asio 和 TinyXML2。
- Asio 是一个跨平台 C++ 库,用于网络和低级 I/O 编程。
- TinyXML2 解析 XML 配置文件,使 Fast DDS 能够使用它们(参阅 XML 配置文件)。
这些库(FastCDR、Asio 和 TinyXML2)可以由用户安装,也可以在构建 Fast DDS 时下载使用。在后者情况下,这些库称为 Fast DDS 的内部第三方库。要启用这些内部库,可以将 THIRDPARTY
或 EPROSIMA_BUILD
设置为 ON。
可以通过以下 Fast DDS CMake 选项配置这些库。
选项 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
THIRDPARTY_fastcdr | - ON:如果系统中未找到 Fast CDR,则启用内部 Fast CDR 库。- FORCE:无论是否已找到 Fast CDR,都强制使用内部 Fast CDR 库。- OFF:禁用内部 Fast CDR 库。如果未设置为 FORCE 且 EPROSIMA_BUILD 为 ON,则默认值为 ON。 | ON, OFF, FORCE | OFF |
THIRDPARTY_Asio | - ON:如果系统中未找到 Asio,则启用内部 Asio 库。- FORCE:无论是否已找到 Asio,都强制使用内部 Asio 库。- OFF:禁用内部 Asio 库。如果未设置为 FORCE 且 EPROSIMA_BUILD 为 ON,则默认值为 ON。 | ON, OFF, FORCE | OFF |
THIRDPARTY_TinyXML2 | - ON:如果系统中未找到 TinyXML2,则启用内部 TinyXML2 库。- FORCE:无论是否已找到 TinyXML2,都强制使用内部 TinyXML2 库。- OFF:禁用内部 TinyXML2 库。如果未设置为 FORCE 且 EPROSIMA_BUILD 为 ON,则默认值为 ON。 | ON, OFF, FORCE | OFF |
THIRDPARTY_android-ifaddrs | - 仅在目标系统(CMAKE_SYSTEM_NAME )为 Android 且 ANDROID 变量为 1 时使用。- ON:如果系统中未找到 android-ifaddrs,则启用内部 android-ifaddrs 库。- FORCE:无论是否已找到 android-ifaddrs,都强制使用内部库。- OFF:禁用内部库。 | ON, OFF, FORCE | OFF |
THIRDPARTY | 未单独指定时,为所有第三方库(如 THIRDPARTY_fastcdr 、THIRDPARTY_Asio 、THIRDPARTY_TinyXML2 和 THIRDPARTY_android-ifaddrs )设置值。 | ON, OFF, FORCE | OFF |
THIRDPARTY_UPDATE | 启用所有第三方 Git 子模块的更新。 | ON, OFF | ON |
[!NOTE]
ANDROID
是一个 CMake 环境变量,当目标系统为 Android(CMAKE_SYSTEM_NAME=Android
)时,其值为 1。
测试选项
eProsima Fast DDS 提供了一整套用于持续集成的测试。这些测试类型包括单元测试、黑盒测试、性能测试、性能剖析测试和 XTypes 测试。测试的构建和执行可以通过以下 Fast DDS CMake 选项来指定:
选项 | 描述 | 可能的值 | 默认值 |
---|---|---|---|
FASTDDS_PIM_API_TESTS | 启用用于验证 DDS 通信的黑盒测试,这些测试使用 Fast DDS 的 DDS 层 API。 | ON, OFF | OFF |
FASTDDS_EXAMPLE_TESTS | 启用用于验证 Fast DDS 示例的测试构建。 | ON, OFF | OFF |
PERFORMANCE_TESTS | 启用性能测试的构建(除视频性能测试外,视频测试需要同时将 PERFORMANCE_TESTS 和 VIDEO_TESTS 设置为 ON)。 | ON, OFF | OFF |
PROFILING_TESTS | 启用基于 Valgrind 的性能剖析测试构建。 | ON, OFF | OFF |
EPROSIMA_BUILD_TESTS | 启用黑盒测试、单元测试、XTypes 测试、RTPS 通信测试和 DDS 通信测试的构建。如果 EPROSIMA_BUILD 为 ON 且 EPROSIMA_INSTALLER 为 OFF,则此选项为 ON。 | ON, OFF | OFF |
VIDEO_TESTS | 如果 PERFORMANCE_TESTS 为 ON,则启用视频性能测试的构建。 | ON, OFF | OFF |
DISABLE_UDPV6_TESTS | 禁用 UDPv6 测试。 | ON, OFF | OFF |
INSTALL_ANDROID_TESTS | 仅适用于 Android 交叉编译。将测试标记为安装到连接的设备/模拟器。 | ON, OFF | OFF |
ANDROID_TESTING_ROOT | 仅适用于 Android 交叉编译。在 Android 设备/模拟器上用于安装和运行测试的路径。 | 有效的 Unix 文件系统路径字符串 | ”” |