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

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

我们如果使用的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.zskr.cn/news/38948.html

相关文章:

  • Rockchip RK3588 - Mali-G610 GPU驱动(mesa+Panthor)
  • auto
  • 写给创业者新手:什么是MAU指标,什么是ARR、PMF
  • 实验4:MobileNet ShuffleNet - OUC
  • 使用 Docker Compose 轻松实现 INFINI Console 离线部署与持久化管理
  • 第6章 语句
  • Modbus RTU 通信格式详解学习笔记
  • Selenium3+Python3 自动化项目项目实战day1
  • MarkDown初入
  • 英语_作文_8AU3_Curiosity
  • P7. TensorBoard的使用(一)
  • 如何从手机内部恢复数据?2025年9大最佳手机数据恢复软件
  • 如何将数据从 Mac 硬盘恢复数据到电脑:所有方法
  • Mac数据恢复:Mac 十大数据恢复软件详细评测
  • iPad照片、联系人、笔记恢复工具: iPad 数据恢复软件
  • A Rock N Roll Fantasy
  • 从损坏_格式化_删除的源中提取数据的 7 款数据恢复软件
  • andriod集成x5内核
  • CF2161 Pinely Round 5 (Div. 1 + Div. 2) 游记(VP)
  • 以太网交换技术
  • 2025-11-03 NOIP 模拟赛1 赛后总结
  • 以销定采是什么?为什么越来越重要?
  • 2025年优质少儿编程机构揭秘:提供国家等级测评+优质的课程体系+一站式赛考服务!
  • Modbus协议功能码详解学习笔记
  • 议论文素材分类整理
  • 使用WSL挂载U盘及SD卡外设的方案
  • day06-自动出题工作流
  • 推送docker镜像到github
  • godot 描边插件
  • 对递归两层含义的理解