当前位置: 首页 > news >正文

Ubuntu下FastDDS的源码编译和简单测试

FastDDS是eprosima公司开发的DDS(Data Distribution Service)库,使用的语言是C++,自称是"The Most Complete Open Source DDS Middleware",其官网是https://eprosima.com/,FastDDS源码在https://github.com/eProsima/Fast-DDS

FastDDS的协议是Apache-2.0 license,使用免费,咨询收费。

本文讲述在Ubuntu下如何源码编译FastDDS,并运行其自带例子。相关软件版本如下,

  • FastDDS:2.14.1,也是当前文章写作时的最新release版本
  • 系统:Ubuntu 22.04, 内核版本是5.15.153.1
  • GCC版本:11.4.0

一 下载相关代码

1. 下载Fast-DDS

执行下面命令下载,

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

下载完后出现目录Fast-DDS,cd进入Fast-DDS目录,然后切换到2.14.1的分支,这点很重要,

cd Fast-DDS
git checkout remotes/origin/2.14.1

因为本文使用2.14.1分支,所以需要切换过来,不然就是master分支了。

切换好之后可以使用git branch -a来查看当前所在分支,如下,
在这里插入图片描述

2. 下载子模块

FastDDS的编译依赖一些子模块,打开Fast-DDS/.gitmodules可以看到需要的子模块,如下,有4个,
在这里插入图片描述

这里在Fast-DDS目录下执行下面命令来下载子模块,

git submodule update --init --recursive

下载完毕后,可以在Fast-DDS/thirdparty/下查看

3. 下载foonathan_memory

这个也是Fast-DDS需要的依赖库,需要单独下,其地址是https://github.com/foonathan/memory,

执行下面命令进行下载

git clone https://github.com/foonathan/memory

下载完后出现目录memory


二 编译

1. 搭建简单工程

这里搭建一个简单CMake工程来控制编译,可以让整个过程非常清晰干净,首先创建一个目录,这里叫dds_001,和Fast-DDS以及memory在同一个目录下(可以根据自己的实际情况选择其它地方创建目录),
在这里插入图片描述
然后cd进入dds_001,使用软链接命令ln创建Fast-DDS和memory的软链接,

ln -s ../Fast-DDS Fast-DDS
ln -s ../memory memory

最后创建文件CMakeLists.txt和创建目录build,整体目录结构如下,
在这里插入图片描述
这样我们就可以通过CMake来控制编译了

2. 编译安装fastcdr,tinyxml2和foonathan_memory

CMakeLists.txt内容如下,

cmake_minimum_required(VERSION 3.20)project(demo)add_subdirectory(./Fast-DDS/thirdparty/fastcdr)
add_subdirectory(./Fast-DDS/thirdparty/tinyxml2)
add_subdirectory(./memory)

cd到build目录,然后执行下面命令,

cmake .. && make

编译完毕后,执行安装,

sudo make install

2. 编译安装asio

asio是不依赖boost的C++网络库,它不用cmake,用的autoconf,所以先要安装autoconf

sudo apt install autoconf

然后进入asio目录,位置在Fast-DDS/thirdparty/asio/asio/,接着执行下面命令进行编译安装

./autogen.sh
./configure
make
sudo make install

3. 编译FastDDS

至此,依赖库都已经准备好了,这里就可以编译FastDDS,回到工程的CMakeLists.txt,改成如下,

cmake_minimum_required(VERSION 3.20)project(demo)# add_subdirectory(./Fast-DDS/thirdparty/fastcdr)
# add_subdirectory(./Fast-DDS/thirdparty/tinyxml2)
# add_subdirectory(./memory)add_subdirectory(./Fast-DDS)

然后cd进入build目录,接着执行下面的命令,

rm -rf *
cmake -DCOMPILE_EXAMPLES=ON ..
make -j2

等待一会就可以编译完成了。这里同时把自带例子也编译了。

编译完成后生成的库文件在build/Fast-DDS/src/下,
在这里插入图片描述


三 运行例子

最后运行FastDDS自带的例子HelloWorldExample,位于build/Fast-DDS/examples/cpp/dds/HelloWorldExample/,
打开一个终端,运行publisher,如下,

./DDSHelloWorldExample publisher

然后打开另外一个终端,运行subscriber,如下,

./DDSHelloWorldExample subscriber

最后publisher这边打印如下,
在这里插入图片描述

subscriber这边打印如下,
在这里插入图片描述
这样例子就运行成功了。


四 小结

本文讲述了在Ubuntu下如何源码编译FastDDS,并进行简单测试。可以看出FastDDS有很多依赖库,编译不是太简单,侧面说明它是个比较大的工程项目。

另外,还有一个比较新的DDS开源库:Cylone DDS,其官网是https://cyclonedds.io/,github地址是https://github.com/eclipse-cyclonedds/cyclonedds,这个库的源码编译就比较简单了,感兴趣的读者可以看下。

相关文章:

  • C语言小例程
  • 自动驾驶仿真Carla -ACC功能测试
  • Centos7 Mysql8.3.0 安装地址
  • 数据分析的数学概念
  • GitHub Copilot 登录账号激活,已经在IntellJ IDEA使用
  • 鸿蒙 HarmonyOS NEXT星河版APP应用开发—上篇
  • C#循环语句总结
  • LLM功能应用的测试艺术:策略与实践
  • 一颗B+树可以存储多少数据?
  • 【大数据 复习】第11,12,13,14章
  • SSRF服务端请求伪造
  • STM32三种调试工具CMSIS-DAP、J-Link和ST-Link
  • Renesas MCU使用定时器之实现1ms定时中断
  • redis大key优化
  • csdn上传源码资源卖钱能买房买车吗?每天最高收入200-500?
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • AHK 中 = 和 == 等比较运算符的用法
  • co模块的前端实现
  • docker-consul
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript 奇技淫巧
  • JS笔记四:作用域、变量(函数)提升
  • Linux后台研发超实用命令总结
  • Rancher如何对接Ceph-RBD块存储
  • SSH 免密登录
  • supervisor 永不挂掉的进程 安装以及使用
  • 规范化安全开发 KOA 手脚架
  • 开源SQL-on-Hadoop系统一览
  • 浏览器缓存机制分析
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (31)对象的克隆
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读30/100)Convolutional Pose Machines
  • (七)Java对象在Hibernate持久化层的状态
  • (实战篇)如何缓存数据
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .htaccess配置重写url引擎
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net经典笔试题
  • .NET企业级应用架构设计系列之应用服务器
  • .NET轻量级ORM组件Dapper葵花宝典
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • []Telit UC864E 拨号上网
  • [acm算法学习] 后缀数组SA