如何启用cycloneDDS的iceoryx共享内存?(转载)

news/2025/11/3 20:53:22/文章来源:https://www.cnblogs.com/wsttask/p/19188294

我们如果使用的cycloneDDS版本是0.10以上的,用这个官方文档

共享内存交换 — Eclipse Cyclone DDS,0.11.0

如果是以下的,用这个

Shared Memory — Eclipse Cyclone DDS 0.8.2 documentation

首先我们需要先下载安装iceoryx,因为cycloneDDS如果要使用共享内存传输是依赖于这个插件的。顺带一提,只有同一节点的不同进程间会使用到共享内存,cycloneDDS是根据如果发布者和订阅者的ip相同则使用共享内存。本次教程以安装iceoryx-2.0.6为例

eclipse-iceoryx/iceoryx: Eclipse iceoryx™ - true zero-copy inter-process-communication

先下载压缩包然后解压,我在这里遇到了一个小问题,如果使用finallshell这类软件上传到虚拟机,要注意文件的用户组。比方说我用root用户上传,然后在vscode里面使用普通用户的ssh连接,在修改文件时,就会出现权限问题

未能保存“***”: 无法写入文件”vscode-remote://ssh-remote…

No Permissions(FileSystemError):Error:EACCES:permission denied ,open …

  • 1
  • 2
  • 3

因为普通用户可能对root用户拥有的文件夹没有写权限,所以上传文件的时候用普通用户吧

在这里插入图片描述

iceoryx在解压之后,先安装必要的依赖包

sudo apt install cmake libacl1-dev libncurses5-dev pkg-config maven
  • 1

编写编译的脚本程序build.sh

rm build
cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install -DBUILD_SHARED_LIBS=ON -Hiceoryx_meta
cmake --build build --config Debug --target install
shell
  • 1
  • 2
  • 3

-Bbuild:在和sh文件同级的目录下创建一个build文件夹,将所有编译的中间文件放进去

-DCMAKE_INSTALL_PREFIX:在和sh文件同级的目录下创建一个install文件夹,存放iceoryx编译出来的库文件

-DBUILD_SHARED_LIBS:启用动态库

编译的时候需要联网,iceoryx去gitclone其他的依赖,如cpptoml,如果克隆失败请打开梯子。不联网的做法我没找到,估计是先下载cpptoml的源码,放在iceoryx-2.0.6/build/dependencies/cpptoml/src下,然后修改 iceoryx_posh/CMakeLists.txt 中的 find_package(cpptoml REQUIRED)

# 替换为如下:
add_subdirectory(/iceoryx-2.0.6/build/dependencies/cpptoml cpptoml_build)
include_directories(/iceoryx-2.0.6/build/dependencies/cpptoml/include)
cmake
  • 1
  • 2
  • 3

最后在编译脚本中加入这个参数-DDOWNLOAD_TOML_LIB=OFF,如果有不联网成功的请在评论中补充让更多人看见😀

接下来在build目录下创建iox_config.toml这个文件,内容如下

[general]
version = 1

[[segment]]

[[segment.mempool]]
size = 16448
count = 32768

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

之后直接运行iceoryx的可执行程序,路径自己看着改吧

./iceoryx-2.0.6/build/iox-roudi -c ./iceoryx-2.0.6/build/iox_config.toml

在这里插入图片描述

第二步编译cycloneDDS

编译dds库的脚本build.sh

rm -rf build
rm -rf install
cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install -DENABLE_ICEORYX=On -DBUILD_EXAMPLES=On -DCMAKE_PREFIX_PATH=/home/lhj/Desktop/dds/iceoryx-2.0.6/install
cmake --build build --config Debug --target install
shell
  • 1
  • 2
  • 3
  • 4

-DENABLE_ICEORYX:启用冰羚

-DCMAKE_PREFIX_PATH:设置冰羚的install库目录

编译helloworld buildHelloWorld.sh

cd examples/helloworld
rm -rf build
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=/home/lhj/Desktop/dds/cyclonedds-master/install ..
cmake --build .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

-DCMAKE_PREFIX_PATH:设置dds库目录

设置配置文件,创建cycloneDDS.xml

<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/master/etc/cyclonedds.xsd"><Domain Id="any"><General><Interfaces><!-- Specify the network interface by its address --><NetworkInterface address="192.168.116.130"/> 改成你自己的虚拟机ip<PubSubMessageExchange name="iox" library="psmx_iox" config="LOG_LEVEL=INFO;"/></Interfaces><AllowMulticast>false</AllowMulticast> <!-- Explicitly disable multicast --><MaxMessageSize>65500B</MaxMessageSize></General><Internal><Watermarks><WhcHigh>500kB</WhcHigh></Watermarks></Internal><Tracing><Verbosity>config</Verbosity> <!-- 最详细的日志 --><OutputFile>/home/lhj/Desktop/dds/cyclonedds-master/logs/cdds.log</OutputFile> <!-- 日志文件位置 --></Tracing>
<span class="token tag" data-default-fontsize="14px" style="font-size: 14px !important;"><span class="token tag" data-default-fontsize="14px" style="font-size: 14px !important;"><span class="token punctuation" data-default-fontsize="14px" style="font-size: 14px !important;">&lt;/</span>Domain</span><span class="token punctuation" data-default-fontsize="14px" style="font-size: 14px !important;">&gt;</span></span>

</CycloneDDS>

xml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

设置配置文件的环境变量,不想每次启动终端都用export设置环境变量就写在~/.bashrc里吧,详见使用交叉编译工具链运行cycloneDDS

export CYCLONEDDS_URI=file://cyclonedds.xml 你自己的配置文件位置
  • 1

最后在启动helloworld示例的终端中输入以下指令,设置一下环境变量,然后就可以启动示例了,会有红箭头的提示

export LD_LIBRARY_PATH=/home/lhj/Desktop/dds/iceoryx-2.0.6/install/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
  • 1

在这里插入图片描述

然后日志里面也会有输出,使用了iox-psmx

在这里插入图片描述

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

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

相关文章

AI浪潮下的学习与就业:机遇还是陷阱?

最近刷到一堆AI相关的新闻,感觉整个科技圈都炸了。从OpenAI在大学里搞实验,到DeepCode在论文复现代码上碾压人类博士,再到微软悄悄去掉Copilot的警告提示,AI这玩意儿真是越来越猛了。作为一个学软件工程的,我一边…

如何从csdn中快速转载文章(转载)

原文链接:https://www.cnblogs.com/SymPny/p/17570360.html#:~:text=按住Ctrl%2BF快捷键,寻找"article_content" 在编辑界面直接粘贴。 界面如下:,转载成功! 参考文档: https%3A%2F%2Fblog.csdn.net%2F…

win10安装MongoDB 3.0.15 Community

win10安装MongoDB 3.0.15 Community 1、下载MongoDB 下载地址:https://www.mongodb.com/try/download/community-edition/releases/archive安装步骤运行安装程序‌:双击下载好的.msi文件,启动安装向导。接受许可协议…

auto

auto关键字的使用 auto auto关键字是在编译期推到出类型然后替换,auto关键字不允许定义数组,不允许作为普通函数的参数,C++14之前不允许作为函数的返回值但是支持返回值后置,auto修饰的变量必须直接初始化,类内非…

一行“优雅”代码踩爆3x3矩阵:Python列表乘法的“共享引用”陷阱

一行“优雅”代码踩爆3x3矩阵:Python列表乘法的“共享引用”陷阱 很多Python新手初次创建多维列表时,都会被[[0] * 3] * 3这种写法吸引——一行代码搞定3x3矩阵,看起来简洁又聪明。可当你像这样修改一个元素时,却会…

写给创业者新手:什么是MAU指标,什么是ARR、PMF

写给创业者新手:什么是MAU指标,什么是ARR、PMF大家好,我是jobleap.cn的小九。今天谈谈创业者必知必会的基础概念。# MAU MAU(Monthly Active Users)的定义是:**在一个自然月内至少登录或使用过一次产品的独立用户数…

git不小心把本地从未提交过的贮藏的版本删掉了,如何恢复?

事故发生背景:晚上加班不小心把未提交过的本地贮藏删掉了!!! 我是刚删完里面就反应过来,卧槽!!!误删本地贮藏了(因为我本地同时在改好几个需求,可能A需求改一半,还不能提交,所以就暂时贮藏在本地,然后就去…

ffmpeg安装配置

一、下载ffmpeg安装包打开Download FFmpeg 官网,选择 Windows builds for gyan.dev2.下滑选择 release builds 部分,选择 ffmpeg-7.1.1-essentials_build.zip3.下载完后,解压到本地二、配置本地环境变量开始菜单输入…

【C】 static用法

static用法 1. 在 C语言 中,static 关键字用于控制变量或函数的作用域和生命周期。当它修饰函数时,含义如下: static int add(int a, int b) {return a + b; } 上面的函数前加了 static,表示这是一个 静态函数(st…

Python线程锁

多线程用于IO、网络请求等地方,只要不是CPU密集型,都可以直接使用多线程。 线程锁在代码中发挥着关键的保护作用,让我详细解释它的工作原理: 锁的作用机制 1. 基本工作原理 with lock:if ensp_id in ensp_to_seq:r…

若依前端验证码的实现

由于之前没时间,现在重新写一份 好吵啊,游戏人的吼叫声,嗓门太大了 有钱了买个好的耳机 详细视频讲解:https://www.bilibili.com/video/BV1HT4y1d7oA?spm_id_from=333.788.player.switch&vd_source=886219f6fb…

从O(n)到O(n):Python字符串拼接的效率陷阱与最佳实践

从O(n)到O(n):Python字符串拼接的效率陷阱与最佳实践 在Python开发中,字符串拼接是最常见的操作之一。但看似简单的+号拼接,在循环场景下可能埋下严重的性能隐患。本文通过两段代码的对比,拆解字符串拼接的效率差异…

实验4:MobileNet ShuffleNet - OUC

实验4:MobileNet & ShuffleNet 姓名: 学号:姓名和学号?本实验属于哪门课程? 中国海洋大学25秋《软件工程原理与实践》实验名称? 实验4:MobileNet & ShuffleNet博客链接:学习要求CNN的基本结构:卷积、…

模拟赛 31

T1简单题,排序后直接枚举两个有画面格子之间的间隔数,即为可能节省的行数或列数,移动次数也易求。点击查看代码 #include<bits/stdc++.h> #define MAXN 500005 #define int long long const int inf=1e18; us…

CSP-S 2025 T3 小结

这个主要是写给自己看的。 就是观察到 b 性质是个扫描线。 考虑加强,会发现把 trie 树套上去就没了。 前面的思路不难想,主要是最后一步。 代码: #include<bits/stdc++.h> #include<bits/extc++.h> usi…

第三十二篇

今天是11月3号,进行期中考试了,难

2025年苏州AIGEO 优化服务商深度测评:TOP5 企业核心优势与实战案例对比

这份 GEO 优化服务商榜单与实践指南,既提供了可直接对标选择的优质服务商,也拆解了不同行业的定制化策略与落地路径。对企业而言,GEO 优化不再是单一的技术操作,而是 AI 时代品牌抢占流量入口、传递核心价值的关键…

使用 Docker Compose 轻松实现 INFINI Console 离线部署与持久化管理

本文是 INFINI Console 环境搭建系列的第四篇,专为需要在离线或内网环境中容器化部署 INFINI Console 与 Easysearch 的用户设计。系列回顾与引言 在我们的 INFINI 本地环境搭建系列博客中:第一篇《搭建持久化的 INF…

第6章 语句

6.5 if语句悬垂else (dangling-else) 问题:当一个if子句多于else子句时,对于每一个else,究竟属于哪个if。 C++中会将else匹配给最后出现的尚未匹配的if子句。

十一月杂题

十一月杂题1. CF1067D Computer Game 考虑有了一次升级机会之后一定只会对着期望收益最高的做。于是只需要决策升级之前的决策。设 \(f_t\) 为还剩 \(t\) 秒的最大收益,\(x\) 为期望收益最大的任务的期望收益,则有 \…