文章

fastdds编译教程

Linux源码编译

  1. 创建一个 Fast-DDS 目录,用于下载并构建 eProsima Fast DDS 及其依赖项:

    1
    
    mkdir ~/Fast-DDS
    
  2. 克隆以下依赖项,并使用 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_EXAMPLESON, OFFOFF
EPROSIMA_BUILD启用 Fast DDS 的内部构建。如果 EPROSIMA_INSTALLER 为 ON,则此选项也为 ON。启用此选项会导致以下选项自动设为 ON:- INTERNAL_DEBUG - 如果 EPROSIMA_INSTALLER 为 OFF,则 COMPILE_EXAMPLES 为 ON - 如果未强制设置,多个第三方库选项(如 THIRDPARTY_fastcdr)为 ONON, OFFOFF
BUILD_SHARED_LIBS将内部库构建为共享库,即使 add_library() 函数创建共享库。除非显式指定为静态库,否则所有库均构建为共享库。ON, OFFON
SECURITY启用 Fast DDS 的安全模块。有关安全模块的更多信息,请参阅安全ON, OFFOFF
NO_TLS禁用传输层安全性 (TLS) 支持。有关 Fast DDS TLS 配置的更多信息,请参阅TLS over TCPON, OFFOFF
SHM_TRANSPORT_DEFAULT将共享内存传输 (SHM) 添加到默认传输方式。有关 Fast DDS SHM 传输的更多信息,请参阅SHMON, OFFON
FASTDDS_STATISTICS启用 Fast DDS 统计模块。有关此模块的更多信息,请参阅统计模块ON, OFFON
COMPILE_EXAMPLES构建 Fast DDS 示例。如果 EPROSIMA_BUILD 为 ON 且 EPROSIMA_INSTALLER 为 OFF,则此选项为 ON。示例可以在 eProsima Fast DDS 的 GitHub 仓库中找到。ON, OFFOFF
INSTALL_EXAMPLES安装 Fast DDS 示例,即将示例添加到安装组件列表(CPACK_COMPONENTS_ALL)。如果 EPROSIMA_INSTALLER 为 ON,则此选项为 ON。ON, OFFOFF
BUILD_DOCUMENTATION使用 Doxygen 创建 Fast DDS API 参考文档。如果 EPROSIMA_INSTALLER 为 ON 或 CHECK_DOCUMENTATION 为 ON,则此选项为 ON。ON, OFFOFF
CHECK_DOCUMENTATION从 Read the Docs 媒体服务器下载 Fast DDS 文档。文档文件会解压到 doc/manual 目录,更新任何已存在的版本。如果此选项为 ON,则 BUILD_DOCUMENTATION 也会设为 ON。ON, OFFOFF
STRICT_REALTIME启用严格的实时行为。有关 Fast DDS 实时配置的更多信息,请参阅实时使用案例ON, OFFOFF
SQLITE3_SUPPORT构建 SQLITE3 插件,支持 TRANSIENT_DURABILITY_QOSPERSISTENT_DURABILITY_QOS 配置,这些是持久性服务的选项。ON, OFFON
APPEND_PROJECT_NAME_TO_INCLUDEDIR启用后,头文件会安装到以 fastdds 结尾的路径中。这可以避免在合并的 catkin、ament 或 colcon 工作空间中覆盖此包时的目录搜索顺序问题。ON, OFFOFF
USE_THIRDPARTY_SHARED_MUTEX启用后,将使用自定义的 shared_mutex 实现,而非标准库中的实现。Fast DDS 要求使用 PTHREAD_RWLOCK_PREFER_READER_NP,这是其死锁预防逻辑所依赖的优先级策略。此选项还可以避免 GCC/Clang STL 实现中的错误报告。ON, OFFOFF (Linux & Mac), ON (Windows)
SANITIZER添加代码运行时检测功能。支持的选项包括:- Thread:启用线程检测工具 - Address:启用地址检测工具OFF, Address, ThreadOFF

日志选项

Fast DDS 使用其可配置的日志模块,支持不同的详细程度日志级别。有关更多信息,请参阅日志记录。 可以通过以下 Fast DDS CMake 参数配置日志模块。

选项描述可能的值默认值
LOG_CONSUMER_DEFAULT为日志模块选择默认的日志消费者。AUTO 的行为与 STDOUTERR 相同。有关更多信息,请参阅日志消费者AUTO, STDOUT, STDOUTERRAUTO
LOG_NO_INFO禁用 Info 日志级别。如果 Fast DDS 在单配置生成器中以调试模式构建,则默认值为 OFF。ON, OFFON
FASTDDS_ENFORCE_LOG_INFO即使在非调试配置中也启用 Info 日志级别。此选项仅在 LOG_NO_INFO 设置为 OFF 时生效。请注意,这可能会显著影响性能。ON, OFFOFF
LOG_NO_WARNING禁用 Warning 日志级别。ON, OFFOFF
LOG_NO_ERROR禁用 Error 日志级别。ON, OFFOFF
INTERNAL_DEBUG启用日志消息的编译(请参阅禁用日志模块)。此外,如果 EPROSIMA_BUILD 为 ON,则此选项也为 ON。ON, OFFOFF
ENABLE_OLD_LOG_MACROS启用旧日志宏(请参阅旧日志宏禁用)。ON, OFFON

第三方库选项

Fast DDS 使用 eProsima FastCDR 库实现序列化机制。此外,Fast DDS 依赖两个外部库:Asio 和 TinyXML2。

  • Asio 是一个跨平台 C++ 库,用于网络和低级 I/O 编程。
  • TinyXML2 解析 XML 配置文件,使 Fast DDS 能够使用它们(参阅 XML 配置文件)。

这些库(FastCDR、Asio 和 TinyXML2)可以由用户安装,也可以在构建 Fast DDS 时下载使用。在后者情况下,这些库称为 Fast DDS 的内部第三方库。要启用这些内部库,可以将 THIRDPARTYEPROSIMA_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, FORCEOFF
THIRDPARTY_Asio- ON:如果系统中未找到 Asio,则启用内部 Asio 库。- FORCE:无论是否已找到 Asio,都强制使用内部 Asio 库。- OFF:禁用内部 Asio 库。如果未设置为 FORCE 且 EPROSIMA_BUILD 为 ON,则默认值为 ON。ON, OFF, FORCEOFF
THIRDPARTY_TinyXML2- ON:如果系统中未找到 TinyXML2,则启用内部 TinyXML2 库。- FORCE:无论是否已找到 TinyXML2,都强制使用内部 TinyXML2 库。- OFF:禁用内部 TinyXML2 库。如果未设置为 FORCE 且 EPROSIMA_BUILD 为 ON,则默认值为 ON。ON, OFF, FORCEOFF
THIRDPARTY_android-ifaddrs- 仅在目标系统(CMAKE_SYSTEM_NAME)为 Android 且 ANDROID 变量为 1 时使用。- ON:如果系统中未找到 android-ifaddrs,则启用内部 android-ifaddrs 库。- FORCE:无论是否已找到 android-ifaddrs,都强制使用内部库。- OFF:禁用内部库。ON, OFF, FORCEOFF
THIRDPARTY未单独指定时,为所有第三方库(如 THIRDPARTY_fastcdrTHIRDPARTY_AsioTHIRDPARTY_TinyXML2THIRDPARTY_android-ifaddrs)设置值。ON, OFF, FORCEOFF
THIRDPARTY_UPDATE启用所有第三方 Git 子模块的更新。ON, OFFON

[!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, OFFOFF
FASTDDS_EXAMPLE_TESTS启用用于验证 Fast DDS 示例的测试构建。ON, OFFOFF
PERFORMANCE_TESTS启用性能测试的构建(除视频性能测试外,视频测试需要同时将 PERFORMANCE_TESTSVIDEO_TESTS 设置为 ON)。ON, OFFOFF
PROFILING_TESTS启用基于 Valgrind 的性能剖析测试构建。ON, OFFOFF
EPROSIMA_BUILD_TESTS启用黑盒测试、单元测试、XTypes 测试、RTPS 通信测试和 DDS 通信测试的构建。如果 EPROSIMA_BUILD 为 ON 且 EPROSIMA_INSTALLER 为 OFF,则此选项为 ON。ON, OFFOFF
VIDEO_TESTS如果 PERFORMANCE_TESTS 为 ON,则启用视频性能测试的构建。ON, OFFOFF
DISABLE_UDPV6_TESTS禁用 UDPv6 测试。ON, OFFOFF
INSTALL_ANDROID_TESTS仅适用于 Android 交叉编译。将测试标记为安装到连接的设备/模拟器。ON, OFFOFF
ANDROID_TESTING_ROOT仅适用于 Android 交叉编译。在 Android 设备/模拟器上用于安装和运行测试的路径。有效的 Unix 文件系统路径字符串””
本文由作者按照 CC BY 4.0 进行授权