交叉编译 iceoryx

交叉编译 iceoryx

概述

logo

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

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

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

下载

开发版本 (最新)

如果以研究学习为目的,或者希望尝试最新特性,又或者希望参与到 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+ 版本。

提示:cmake 更新可参考「Ubuntu/Linux 升级 CMake 版本」。

首先创建一个环境配置文件 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 官方关于 DESTDIR 的用法说明。

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

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


△ \triangle 交叉编译 acl

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值