iceoryx 之 qnx交叉编译

整体模块结构:

Linux下cmake编译:

按照源码中的.md文档,屏蔽cpptoml模块编译可以正常生成。可以直接在各模块的CMakeLists.txt上建立build文件进行cmake..。每个模块从底向上依次编译,编译后su make install, make install后才能确保find_package()成功。

iceoryx_hoofs模块:

生成两个动态库

iceoryx_posh模块:

生成可执行文件:iox-roudi                  

四个动态库: libiceoryx_posh_gateway.so  libiceoryx_posh.so libiceoryx_posh_config.so  

libiceoryx_posh_roudi.so

iceoryx_binding_c模块:

生成动态库:libiceoryx_binding_c.so

 

icehello案例运行情况:

root环境下启动iox-roudi进程,随后依次启动server和client进行通讯。

交叉编译QNX:

使用源码脚本方式:

基本操作:

源码installation.md中有说明如何使用代码自带的交叉工具链的编译操作。

注意:

  1. 使用编译脚本之前需要先source qnxsdp-env.sh,设置qnx环境。
  2. ./tools/iceoryx_build_test.sh -t /home/user/toolchains/qnx/qnx_sdp70_aarch64le.cmake,在使用时需要用绝对路径指定.cmake工具。

 遇到的问题:

cpptoml工具的下载编译。

工作环境的虚拟机是不连接外网的。Iceoyrx整个编译体系中,是采用Cmake ExternalProject_Add 命令直接从github下载cpptoml源码作为第三方库进行编译的。

所以在编译的配置阶段由于无法access到此仓库,编译会终止。 

第一种:绕过cpptoml模块的下载编译,在iceoryx_build_test.sh脚本中设置flag变量为off。此方法经过试验,会编译出几个基础模块的库,但是不能生成iox-roudi这个daemon进程的bin文件。

第二种:将对应发行版本的cpptoml的源码下载到本地,修改cmake文件不从github下载,改用本地的.zip文件(相对路径,解压的或者其他压缩格式的没有试验)。

编译成功后可生成相关bin文件,头文件,库文件和配置文件。生成的这些文件可以放到对应的qnx代码仓库环境中做为依赖模块进行使用。

动态库和头文件的使用:

需要注意的是,iceoryx的源码包括一些例程采用了c++14的新特性,需要在common.mk中添加c++14标准。

最开始我使用CXXFLAGS +=  -D_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL -std=c++14,但是却出现某些posix的接口不能使用的情况,后来咨询qnx改用了-std=gnu++14的方式,解决了此类问题。

重写.mk适配项目编译架构:(待更新)

基本思路:梳理iceoryx模块下各模块的CMakeLists.txt,在qnx环境下编写mk文件指定模块所需的源文件,输出对应的目标文件。最底层的iceoryx_hoofs模块开始生成一个libiceoryx_hoofs.so。随后编译iceoryx_posh模块的各个目标文件时,有上下游模块的依赖关系。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值