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

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

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

相关文章

【TB作品】MSP430G2553,单片机,口袋板,流量积算仪设计

题9 流量积算仪设计 某型流量计精度为0.1%, 满刻度值为4L/s,流量计输出为4—20 mA。 设计基于MSP430及VFC32的流量积算仪。 具体要求 (1) 积算仪满刻度10000 L,精度0.1 L; 计满10000 L,自动归零并通过串口(RS232)向上位…

【Cloudscapes V2】Blender商城10周年免费领取礼物超逼真的Vdb云和爆炸合集烟雾体积云字体符号轨迹火焰粒子

6月19号的限时免费领取插件挺牛的,可以在blender里渲染体积云、爆炸特效、火焰、烟雾等效果,非常逼真。 Blender商城10周年免费领取礼物:https://blendermarket.com/birthday Cloudscapes V2 - 超逼真的 Vdb 云和爆炸合集 CloudScapes 是 …

优思学院|怎么选择精益生产培训才不会被坑?

在选择精益生产培训公司时,我们需要从多个角度去思考。企业若只是盲目地跟风,这样的做法无异于缘木求鱼。精益生产的核心在于发现和消除那些不增值的活动,从而提升产品的质量和生产效率,但要知道的是,发现和改进的人就…

揭秘与应对:一打开移动硬盘就提示格式化的深度解析

在日常的数据存储与交换中,移动硬盘因其便携性和大容量而备受青睐。然而,有时我们可能会遇到一种令人困扰的现象:当试图打开移动硬盘时,系统会弹出一个警告窗口,提示“磁盘未被格式化,是否现在格式化&#…

Llama 3 大型语言模型到底是如何炼成的?

Meta 在今年 4 月开源了 Llama 3 大型语言模型,这是 Meta,也是整个行业迄今为止功能最强大的开源 LLM。 那么 Meta 是如何训练 Llama 3 大型语言模型的,又在训练过程中遇到了什么问题,提出了什么新的解决方案呢?近日&…

计算机行业的现状与未来之2024

年年都说编程好,编程工资涨不了。 人家骑车送外卖,月入两万好不好。 一、计算机专业的背景与现状 在过去几十年里,计算机科学相关专业一直是高考考生的热门选择。无论是计算机科学与技术、软件工程,还是人工智能与大数据&#xff…

防止员工离职导致数据泄露,员工离职后把文件带出公司

中科数安的电脑文件资料透明加密防泄密系统确实能够在一定程度上防止员工离职导致的数据泄露。以下是具体的分析: www.weaem.com 访问控制与权限管理:系统实施了严格的权限管理制度,对核心文件和数据资源进行细致的访问权限划分。这意味着&am…

《无与伦比》Centos7 扩容到已有逻辑卷

命令可以查找硬盘和分区情况 fdisk -l lsblk

掌握市场脉动,Anzo Capital深度解析随机指标的超买超卖秘密

随机指标,作为市场分析的利器,主要用于判断资产价格的相对位置,是揭示市场超买与超卖状态的关键工具,也是大多数交易平台的标准配置。它以独特的视角,帮助交易者捕捉市场的微妙变化。下面跟随Anzo Capital视角&#xf…

leetcode (top100)接雨水

题目: 题解: 可以把每个宽度看作一个桶,每个桶能接的水等于这个桶左右两个方向最高桶的最小高度再减去这个桶本身的高度。把每个桶能接的水相加即可。 难点在于如何快速找到当前桶的左右两个方向的最高桶的高度,可以先遍历一遍…

数据库物理计划执行指南

一、背景介绍 伴随信息技术地迅猛发展和应用范围地逐步扩大,数据库已成为企业存储与管理数据的重要工具。但数据量激增以及用户访问需求的与日剧增,数据库性能也将面临巨大挑战。 好在数据库物理计划执行是解决数据库性能问题的重要手段之一&#xff0…

【技巧】Leetcode 201. 数字范围按位与【中等】

数字范围按位与 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4 解题思路 …

服务器数据恢复—KVM虚拟机被误删除如何恢复虚拟磁盘文件?

服务器数据恢复环境&故障: 1台服务器,Linux操作系统EXT4文件系统,部署了数台KVM虚拟机,每台虚拟机包含一个qcow2格式的磁盘文件,和一个raw格式的磁盘文件。 工作人员操作失误删除了3台服务器上的KVM虚拟机&#xf…

13.4 内存管理

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【课程系列04】某客时间AI大模型应用开发实战营

网盘链接 https://pan.baidu.com/s/1blR1eIMDIIp6AbxU4YaK9w 课程收获 "AI大模型应用开发实战营"是一个为期八周的在线课程,旨在教授学员如何开发和应用AI大模型。课程内容从基础理论到实际应用,逐步深入,覆盖了以下要点&#x…

python发邮件给多人的注意事项?如何群发?

python发邮件给多人的效率如何?python发邮件的方法? 在利用Python编程语言实现邮件群发功能时,需要注意许多细节,以确保邮件能有效送达且用户体验良好。AokSend将详细探讨python发邮件给多人时需要注意的各个方面,以帮…

Python邮件加密传输如何实现?有哪些技巧?

Python邮件怎么设置服务器?如何使用Python发送邮件? 为了确保邮件内容在传输过程中不被窃听或篡改,使用加密传输是必不可少的。在使用Python邮件传输时,加密传输是保障信息安全的关键手段。AokSend将详细探讨Python邮件加密传输的…

【C++提高编程-10】----C++ STL常用拷贝和替换算法

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

【Python】类和对象的深入解析

目录 前言 什么是类? 定义一个类 创建对象 访问和修改属性 方法 类的继承 多态 封装 特殊方法 属性装饰器 总结 前言 Python 是一种面向对象的编程语言,它允许程序员通过类和对象来组织和管理代码。面向对象编程(OOP&#xff09…

智慧校园的构建要素是什么

在当今数字时代,智慧校园的构建已成为教育界的热门话题。随着技术的不断进步,学校不再只是传统的教学场所,而是一个充满智能化和创新的环境。那么,智慧校园的构建要素究竟是什么呢? 基础设施建设 高速、稳定的网络覆…