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

news2024/11/17 16:16:31

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,这个库的源码编译就比较简单了,感兴趣的读者可以看下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金鸣识别系统:PDF转Excel的高效利器

在日常办公中,我们经常需要将PDF文档转换为Excel表格以便进行数据分析。然而,当有些PDF转换过程可能会变得复杂,因为许多转换工具无法完美处理图片元素,导致转换后的准确率不高或排版错乱。幸运的是,金鸣识别系统以其卓…

细致解析跨境电商多平台搭建利器-179海关接口源码应用方法

介绍 跨境电商已成为当前电商行业的热门发展方向之一。为满足跨境电商的需求,各大平台纷纷推出了多平台搭建利器。其中,179海关接口源码是一款非常实用的工具,本文将对其应用方法进行细致解析。 了解179海关接口源码 179海关接口源码可以帮…

天翼云8080、80端口用不了的问题

天翼云8080、80端口用不了的问题 前言:前段时间天翼云搞了活动,原来公司用的华为云老板说太贵了也快到期了,就换了天翼云的服务器。 排查: 安全组开放 80 8080 防火墙查看 没有问题 nginx nacos dcoker等停了 查看监听端口 发现…

回答网友的一个DBGrid的问题

起因 网友在QQ群里问Text字段的显示问题。 俺回答:百度了一下 方法有 很多很多 。然后给他百度了6种方案。然后告诉他找个顺眼的用。 可是,对方感觉都顺眼。俺就新写了一个 。 代码 创建测试数据 begin ADODataSet1.DisableControls; colcnt:5; …

git 基本命令

列出分支基本命令: git branch 如果我们要手动创建一个分支 。执行 git branch (branchname) 即可: git branch testing 切换到testing分支: git checkout testing 我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立…

斯巴达(Spartanhost)VPS的性能评测

原创原文链接:详细斯巴达(Spartanhost)VPS的性能和购买价值评测 | BOBO Blog (soulcloser.com)https://www.soulcloser.com/3398/ 引言 最近看了全球的VPS商家,想搞台网站高性能的服务器,发现一个特别有意思的商家竟…

反激开关电源整流桥选型及计算

整流桥的作用就是把输入交流电压整形成直流电压,把正弦波整成馒头波,由于整流管的单向导电 性,在输入电压瞬时值小于滤波电容上电压时整流桥,在这个时候是不导通的,使整流桥的电流变 成2-3ms左右的窄脉冲。为获得所需…

深信服终端安全管理系统EDR版本升级过程

EDR当前版本为3.7.12,具体参考版本详情参数。需要升级到6.0.2R1版本,该版本更改了产品名称,叫做“统一端点安全管理系统aES” 当前版本详情 版本基础信息 软件版本:3.7.12.3829 病毒库版本:20240618174426 漏洞规则库&…

在金仓数据库中导入sql文件,解决中文数据乱码问题

先确定数据库服务端编码方式是UTF8,如果不是,那就先解决这个问题。操作:当连接数据库之后,执行show server_encoding 用Notepad打开,目的:确定文件编码是UTF-8格式 在sql文件前面加上set NAMES utf8; …

为什么AC/DC线性电源的体积大?

电源按照转换原理分类,可分为线性电源和开关电源。线性电源和开关电源的特点如下: 1、线性电源的调整管工作在放大状态,因而发热量大,效率低(与压降多少有关),需要加体积庞大的散热片。实现交流…

第6章 设备驱动程序(3)

目录 6.5 块设备操作 6.5.1 块设备的表示 6.5.2 数据结构 6.5.3 向系统添加磁盘和分区 6.5.4 打开块设备文件 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 6.5 块设备操作 特点: 随机访问任意位置。 固定块大小的传输。 块设备在内…

探究 IP 地址被网站封禁的原因

在我们登录各种网站、APP浏览时,可能会遇到 IP 地址被某些网站封禁的情况。很多人奇怪这是为什么呢? 首先,违反网站的使用规则是比较常见的原因之一。比如,频繁发送垃圾邮件、恶意评论、进行网络攻击或试图破解网站的安全机制等不…

邻氯苯甲酰氯在医药、农药等领域应用广泛 市场需求稳定且有增长趋势

邻氯苯甲酰氯在医药、农药等领域应用广泛 市场需求稳定且有增长趋势 邻氯苯甲酰氯又称为2-氯苯甲酰氯、氯化邻氯苯甲酰,化学式为C7H4Cl2O,是一种化学物质,外观为黄色液体,不溶于水,溶于醇、醚、丙酮,有强烈…

调度算法-进程调度算法

发⽣ CPU 调度通常有以下情况: 1. 当进程从运⾏状态转到等待状态;2. 当进程从运⾏状态转到就绪状态;3. 当进程从等待状态转到就绪状态;4. 当进程从运⾏状态转到终⽌状态 常⻅的调度算法: 先来先服务调度算法最短作业…

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景:测试数据既要在fixture方法中使用,同时也在测试用例中使用 使用方法:在使用parametrize的时候添加"indirectTrue"参数。pytest可以实现将参数传到fixture方法中,也可以在当前测试用例中使用。 原理:参…

硕思闪客精灵_2024最新版下载-闪客精灵软件下载_闪客精灵应用软件

​不同领域的应用证明了能够解析Flash动画片中的视频文件并以*.fla格式进行导出。人所共知的是支持预览和播放所选的Flash动画片或元素。我们都知道除了将静态文字恢复为文本外,硕思闪客精灵提供了将它转换为矢量图的功能。相信大家都认同闪客精灵专业版的优势&…

【YOLOv10改进[注意力]】添加注意力CascadedGroupAttention(2023) + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

本文将进行使用注意力CascadedGroupAttention的实践,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 CascadedGroupAttention 二 使用注意力CascadedGroupAttention 1 整体…

智慧校园软件开发:为学校量身定制的技术解决方案

为了满足智慧校园的需求,一套全面的软件解决方案被设计出来,旨在优化学校管理和提升教学质量。首先,通过实施统一的认证门户,结合OAuth2和SSO技术,确保不同用户群体能便捷且安全地访问所需资源。 教务管理系统被构建成…

【电源开发】输出电压纹波

输出电压纹波是什么 电压纹波指的是直流输出电压中一个交流部分 减小输出电压纹波的方法 调整输出端的电容值 提高开关电源的工作频率

项目二 OpenStack快速入门

任务一 熟悉OpenStack图形界面操作 1.1 Horizon项目 •各OpenStack服务的图形界面都是由Horizon提供的。 •Horizon提供基于Web的模块化用户界面。 •Horizon为云管理员提供一个整体的视图。 •Horizon为终端用户提供一个自主服务的门户。 •Horizon由云管理员进行管理…