交叉编译 iceoryx

news2024/11/16 21:34:59

交叉编译 iceoryx

概述

logo

iceoryx 是用于各种操作系统的进程间通信(IPC)中间件(目前支持 Linux、macOS、QNX、FreeBSD 和 Windows 10)。它起源于汽车行业,当涉及到驾驶员辅助或自动驾驶系统时,需要在不同的过程之间传输大量数据。然而,有效的通信机制也可以应用于更广泛的用例,例如在机器人或游戏开发领域。

iceoryx 使用一种真正的零拷贝共享内存方法,该方法允许在没有单个拷贝的情况下将数据从发布者传输到订阅者。这确保了数据传输具有恒定的延迟,而与有效负载的大小无关。有关更多信息,请查看 1000 字的 iceoryx 简介。

就其本身而言,这并不是一种新的创新,因为这种方法自 20 世纪 70 年代以来就一直在使用。然而,我们进一步采用了这种方法,将其与发布/订阅体系结构、服务发现、现代 C++ 和无锁算法相结合。通过添加一个避免复制的应用程序编程接口(API),我们可以实现我们所称的真正的零拷贝——从发布者到订阅者的端到端方法,而无需创建单个拷贝。

  • GitHub: https://github.com/eclipse-iceoryx/iceoryx

下载

开发版本 (最新)

如果以研究学习为目的,或者希望尝试最新特性,又或者希望参与到 iceoryx 的开发中,可以直接从 github 上拉取最新源码,拉取命令:

git clone https://github.com/eclipse-iceoryx/iceoryx.git

技巧:在 github 页面点击右上角的 Code 按钮获取 git clone 链接。

发行版本

如果以商用量产为目的,一般选择正式的发行版本为佳。在 iceoryx 的 Release 页面,源码以压缩包的形式提供,根据需求选择合适的版本进行下载,以最新的 2.0.3 为例,下载源码包 Source Code (tar.gz).

也可以直接使用 wget 命令下载:

wget https://github.com/eclipse-iceoryx/iceoryx/archive/refs/tags/v2.0.3.tar.gz

交叉编译

解压缩源码包,如果使用 git clone 拉回来的代码可以忽略这一步:

tar -xvf v2.0.3.tar.gz

解压缩源码包之后建议先阅读 README.md 文档,在 Build and install 章节里面有关于编译的相关信息,或者直接阅读 doc/website/getting-started/installation.md 文档。

在 iceoryx 的文档及配置文件中有提及到依赖关系,最主要的是依赖 libacl 库,如果需要完整编译可以先参考「交叉编译 attr」与「交叉编译 acl」两篇文章。需要注意的点就是,需要使用 make DESTDIR=$BUILDSYSROOT install 将编译产物部署到 sysroot 目录便于 iceoryx 编译时依赖,效果类似于 apt install *-dev 安装开发依赖包。

iceoryx 使用了 CMake 编译系统,需要保证系统中已经安装了 cmake 工具。可以使用 apt 命令进行安装:

sudo apt install -y cmake

如果 cmake 版本低于 3.16 需要先更新到 cmake 3.16+ 版本。

首先创建一个环境配置文件 aarch64-environment-setup,配置最重要的交叉编译环境变量。

aarch64-environment-setup:

export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2022.03-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATH

export PREFIX=/usr

export CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-strip

export PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig

在本示例中,交叉编译工具位于 /opt/toolchains/aarch64--glibc--stable-2022.03-1/bin 目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CCCXXCPPLD 环境变量时指定 --sysroot=<dir> 参数让交叉编译器搜索 dir 目录下的头文件与库文件,而不是 /usr/include/usr/lib

source aarch64-environment-setup
cmake -Bbuild -Hiceoryx_meta -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build
cmake --build build --target install DESTDIR=$BUILDSYSROOT
  • 在源码目录下创建环境配置文件并调用 source 命令让环境变量生效;
  • cmake 使用 -B 参数指定构建目录为 build,如果 build 目录不存在则自动创建;使用 -H 参数指定 CMakeLists.txt 文件所在路径,指定 -DBUILD_SHARED_LIBS=ON 编译出动态链接库,并使用 -DCMAKE_INSTALL_PREFIX=/usr 配置安装的目录前缀为 /usr
  • 执行 cmake --build build 命令在 build 目录编译源码;
  • 使用 --target install 进行安装,带上 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,在本示例中,BUILDSYSROOT 指的是交叉编译工具链的 sysroot 目录,此环境变量在 aarch64-environment-setup 中已定义。更详细介绍可以参考 DESTDIR 官方介绍,也可以参考「交叉编译 libcap」关于 DESTDIR 的用法说明。

最终你就可以在 $BUILDSYSROOT/usr 文件夹中找到交叉编译好的 iceoryx 头文件及库文件。如果需要以软件包的形式发布,可以指定 DESTDIR 为其他目录,比如 DESTDIR=/tmp/sysroot 则最终交叉编译出来的产物会在 /tmp/sysroot 文件夹下。Good luck.

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


△ \triangle 交叉编译 acl

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

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

相关文章

一起来学 next.js - getStaticProps、getStaticPaths 篇

之前讲过 next.js 中的 getServerSideProps&#xff0c;今天来讲一讲另一个很类似的 API&#xff1a;getStaticProps&#xff0c;以及和 getStaticProps 紧密相关的 getStaticPaths。 getStaticProps 主要用于构建时落地一些静态数据&#xff0c;但不同于 getServerSideProps&…

动态规划背包问题

背包问题的分类 拿到背包问题,最重要的是会归类到哪一种背包问题中,常见的考题里主要是01背包和完全背包,leetcode上连多重背包的题目都没有。实际完全背包问题就是01背包的一种。 对一和零这道题,很多人容易把m看成一个背包,n看成另一个背包,从而当做多重背包。然而这…

ChatGPT创业潮来了,我既兴奋又焦虑

最近一段时间&#xff0c;ChatGPT从AI领域破圈&#xff0c;成了互联网领域的新风口。创业者和投资人也兴奋起来了。 创业的方向已经很明了。做中国版对标ChatGPT的大模型&#xff0c;是显而易见的一条路。目前百度的“文心一言”已经呼之欲出&#xff0c;原美团联合创始人王慧…

超店有数分享:2023还有哪些tiktok数据值得关注?

目前&#xff0c;tiktok是全球增长最迅猛的社交媒体软件之一。很多商家瞄准了tiktok的变现转化潜力&#xff0c;纷纷入局tiktok电商赛道。在入局这个赛道之前&#xff0c;我们需要了解一些tiktok的相关数据&#xff0c;这样才能更好的了解大局&#xff0c;及时调整自己的业务情…

Swagger2基本使用

这里写目录标题废话篇前言什么是openAPISwagger简介Springfox使用篇swagger的基本使用废话篇 前言 接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变成重中之重。接口文档固然重要&#xff0c;但是由于项目周期等原因后端人员经常出现无法及时…

P21.为什么需要父子shell

脚本的不同执行方式是否会开启子shell 父Shell概念 &#xff08;1&#xff09;pstree查看父进程 如下命令安装pstree yum install -y psmiscsshd--sshd--bash--pstree 第一个sshd为操作系统自己启动的监听sshd服务的程序第二个sshd是shell连接过来启动的shell每次调用bash…

echarts scatter地图上渲染圆点

目录 实现效果实现步骤相关文件实现效果 如上图所示,我们经常遇到一些需求,在地图上根据数据的大小,再画一些直径不一的实心圆。 首先,我们得先把地图画好,再来画这些跟数据有关联的圆形。 为了方便scatter建立坐标系,我们采用geo来自定义绘制地图,而不是使用百度地图或…

前端面试题 —— 计算机网络(二)

目录 一、POST和PUT请求的区别 二、GET方法URL长度限制的原因 三、页面有多张图片&#xff0c;HTTP是怎样的加载表现&#xff1f; 四、HTTP2的头部压缩算法是怎样的&#xff1f; 五、说一下HTTP 3.0 六、HTTP协议的性能怎么样&#xff1f; 七、数字证书是什么&#xff1f…

DC-3 靶场学习

文章目录环境配置&#xff1a;信息搜集&#xff1a;漏洞利用&#xff1a;获取FLAG&#xff1a;环境配置&#xff1a; 还是让DC-3的靶场和kali处于同于网段即可。 DC-3靶场还需要修改一下CD/DVD设置&#xff08;如下&#xff09;。 信息搜集&#xff1a; 首先还是要获取靶机的…

市场上有很多低代码开发平台,不懂编程的人可以用哪些?

市场上有很多低代码开发平台&#xff0c;不懂编程的人可以用哪些&#xff1f;这个问题一看就是外行问的啦&#xff0c;低代码平台主打的就是一个“全民开发”&#xff0c;而且现在很多低代码平台都发展为零代码了&#xff0c;不懂编程也完全可以使用&#xff01; 所谓低代码开…

一三九、vim使用介绍

键盘图 模式切换 移动光标 命令说明shift 6()至本行第一个非空字符shift 4($)至本行末尾w至下一个单词、标点开头W至下一个单词开头b至上一个单词、标点开头B至上一个单词开头ctrl b上翻一页ctrl f下翻一页ctrl d向下翻半页 此比较有用ctrl u向上翻半页 此比较有用gg文件开…

优思学院|DMAIC从入门到精通,轻松学会六西格玛的基本原理!

如果要用一个词汇总结六西格玛品质改进方法&#xff0c;那一定是DMAIC。这个简称列出了六西格玛过程改进中的步骤&#xff0c;提供了完成六西格玛项目的方法概述&#xff0c;就是&#xff1a;定义&#xff08;Define&#xff09;、测量&#xff08;Measure&#xff09;、分析&a…

Rust语言的基本介绍

rust缘起和目标 rust的英文是锈菌&#xff0c;是一种真菌&#xff0c;这种真菌的生命力非常顽强&#xff0c;其 在生命周期内可以产生多达5种孢子类型&#xff0c;这5种生命形态还可以相互转 化。“Rust”也有“铁锈”的意思&#xff0c;暗合“裸金属”之意&#xff0c;代表了R…

网络安全入门(黑客)学习路线-2023最新版

如何成为一名黑客&#xff0c;很多朋友在学习安全方面都会半路转行&#xff0c;作者菌就自个整理了一下知识内容和体系&#xff0c;肝了一个月后&#xff0c;整理出来最适合零基础学习的网络安全学习路线&#xff0c;果断收藏学习下路线。此篇博客讲的非常细&#xff0c;有兴趣…

Python中sys.argv[ ]与Cpp中int main(int argc char *argv[ ])的用法

Python中sys.argv[ ]与Cpp中int main(int argc char *argv[ ])的用法 文章目录Python中sys.argv[ ]与Cpp中int main(int argc char *argv[ ])的用法前言一、Python中sys.argv[]的用法二、Cpp中int main(int argc char *argv[])的用法Reference前言 最近在学习ROS&#xff0c;在…

前端纯函数和副作用概念,且在react上的体现详解

什么是纯函数 纯函数是这样一种函数&#xff0c;即相同的输入&#xff0c;永远会得到相同的输出的函数&#xff0c;而且没有任何可观察的副作用。 什么是副作用 副作用是在计算结果的过程中&#xff0c;系统状态的一种变化&#xff0c;或者与外部世界进行的可观察的交互。 个…

CAN工具 - ValueCAN - 基础介绍(续)

VSpy3&#xff08;Vehicle Spy 3的简写&#xff09;&#xff0c;作为一个常用的车载总线仿真工具&#xff0c;在车载网络领域也是有非常大的市场&#xff0c;前面也简单介绍过一些简单的功能&#xff0c;今天就再次介绍一些。什么是VSpy3&#xff1f;VSpy3是美国英特佩斯公司下…

测试用例设计经典面试题——电梯,杯子,笔,桌子,洗衣机

首先说明的是&#xff0c;遇到这样的测试题目&#xff0c;首先应该反问面试官&#xff0c;需求是什么样的&#xff0c;比如是测什么样的杯子。 因为设计测试用例的规则应该是根据需求分析文档设计用例&#xff0c;客户需求什么&#xff0c;就测试什么。但是在没有需求分析文档…

如何准备pmp考试?(含备考资料)

一、复习计划的制定根据之前在培训班共同奋斗的小伙伴学习时间统计&#xff0c;平均每天的学习时间是在 3-4 小时左右&#xff0c;基本上是白天 1 小时晚上 3 小时左右&#xff0c;通过率基本都在 80% 左右&#xff0c;最好的时候能达到 90%&#xff0c;大概的学习安排如下&…

【科研】【ReID】科研论文怎么写?八股文写作思路

拿 Densely Semantically Aligned Person Re-Identification 这篇文章举例。 本文写作非常好&#xff0c;写的很有逻辑&#xff0c;很标准。科研论文虽然是八股文&#xff0c;但是能经历了百年的发展而来&#xff0c;有它的合理性。我把它Introduction的写作思路跟一下&#x…