Cmake搭建QNX编译环境

news2024/9/23 21:28:49

1、确定QNX系统的架构

我们要如何确认QNX系统的架构呢?

连接我们的qnx开发板,输入下述指令。

uname -a

以我的开发板为例子,版本信息如下:

# uname -a
QNX localhost 7.0.X 2022/04/21-10:05:23EDT SA8155_ADP_Star_v1.0.0_UFS_NORMAL aarch64le

可以看到我们使用的是高通的SA8155芯片,系统架构为aarch64le
同时我们也可以看到QNX系统的版本为7.0.X。

注意上诉我们说的系统架构aarch64le,aarch64le和aarch64并不是相同的。

aarch64 (Big-Endian):

aarch64 表示 ARM 64 位架构的默认字节序,即大端序(Big-Endian)。
在大端序中,数据的高字节保存在内存的低地址处,而低字节保存在高地址处。

aarch64le (Little-Endian):

aarch64le 表示 ARM 64 位架构的小端序(Little-Endian)。
在小端序中,数据的低字节保存在内存的低地址处,而高字节保存在高地址处。

2、交叉编译链的选择

在第一步中我们查看到QNX的系统版本为7.0.X,因此我们采用的交叉编译链版本也要为qnx7系列。我这里选择的是qnx700的交叉编译。具体下载qnx700可以在网上着着,也可参考下面这个博主的文章QNX7开发指南,从而获取qnx交叉编译链。

3、Cmake的编写

cmake_minimum_required(VERSION 3.0)
project(xxx)

#设置编译参数
set(CMAKE_C_FLAGS "-Vgcc_ntoaarch64le")
set(CMAKE_CXX_FLAGS "-Vgcc_ntoaarch64le")



# 设置 CMake 的系统信息
set(CMAKE_SYSTEM_NAME QNX)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


# 指定头文件路径
include_directories(
    xxx/include/
)

set(SRC_LIST
	xxx/xxx.cpp
)

# 链接库文件路径
link_directories(

)

# 添加可执行文件目标
add_library(${PROJECT_NAME} SHARED ${SRC_LIST})


# 要链接的库
target_link_libraries(${PROJECT_NAME} PRIVATE 
)

注意在填写编译参数时候,要根据第一步的获得的系统架构来设置,我的系统架构为aarch64le,在使用qcc命令查看一下qnx700支持的系统架构。

qcc -V
cc: targets available in /home/json/tools/qnx/qnx700/host/linux/x86_64/etc/qcc:
	5.4.0,gcc_ntox86_gpp	
	5.4.0,gcc_ntoarmv7le_gpp	
	5.4.0,gcc_ntox86_cxx	
	5.4.0,gcc_ntox86_64_cxx	
	5.4.0,gcc_ntox86_64	
	5.4.0,gcc_ntoarmv7le	
	5.4.0,gcc_ntox86	(default)
	5.4.0,gcc_ntoaarch64le_cxx	
	5.4.0,gcc_ntox86_64_gpp	
	5.4.0,gcc_ntoarmv7le_cxx	
	5.4.0,gcc_ntoaarch64le	
	5.4.0,gcc_ntoaarch64le_gpp

可以看到里面有个gcc_ntoaarch64le所以我们设置编译参数为:

set(CMAKE_C_FLAGS "-Vgcc_ntoaarch64le")
set(CMAKE_CXX_FLAGS "-Vgcc_ntoaarch64le")

4、编译cmake

可以看到上诉我们的cmake写的很简单,有些编译参数是要在执行cmake时候设置的,比如编译的工具。

在linux中我们可以使用gcc编译,arm中我们可以使用arm-gcc编译,而在qnx中我们要使用qcc编译。

进入到我们的qnx700目录。
在这里插入图片描述
这样我们就找到了qcc的绝对路径。

/home/json/tools/qnx/qnx700/host/linux/x86_64/usr/bin/qcc

下面我们就可以编译cmake了

cmake -DCMAKE_C_COMPILER=/home/json/tools/qnx/qnx700/host/linux/x86_64/usr/bin/qcc -DCMAKE_CXX_COMPILER=/home/json/tools/qnx/qnx700/host/linux/x86_64/usr/bin/qcc ..

执行会看到如下效果:

-- The C compiler identification is QCC 5.4.0
-- The CXX compiler identification is QCC 5.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/json/tools/qnx/qnx700/host/linux/x86_64/usr/bin/qcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/json/tools/qnx/qnx700/host/linux/x86_64/usr/bin/qcc - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done

注意:Check for working C compiler:这一项目如果提示是qcc则设置成功,如果是cc或者gcc则说明设置失败。

有人可能会问了,为什么不在CmkaeLists.txt里面设置CMAKE_C_COMPILER和CMAKE_CXX_COMPILER,我也尝试过,在CmkaeLists.txt里面设置不起作用,cmake时候依然提示cc编译。

5、小记

我们在qcc所在目录可以看到:
在这里插入图片描述
切记,cmake里面的编译器设置千万不可以直接指定里面的gcc/g++工具,会出现很多头文件找不到,库链不到的错误。使用qcc编译,通过设置编译参数来选择性编译。

6、结语

此文看似简单,期间踩了太多的坑了。。。。。泪目
如有疑问可联系QQ:918619587

本文禁止转载

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

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

相关文章

数字与数学高频问题

关卡名 数字与数学高频问题 我会了✔️ 内容 1.掌握数组实现加法的方法 ✔️ 2.掌握高精度计算的实现方法 ✔️ 3.掌握幂运算的技巧 ✔️ 1. 数组实现加法专题 数字加法,小学生都会的问题,但是如果让你用数组来表示一个数,如何实现加法…

HMI和SCADA是什么?SCADA与HMI有何不同?

工业自动化领域最常见的话题之一就是“SCADA与HMI有何不同” ? 人机界面 (HMI) 和监控与数据采集 (SCADA) 是工业自动化领域中经常互换使用的两个概念。在许多应用中,两个组件之间的边界经常存在混淆。这在…

【LeetCode:2477. 到达首都的最少油耗 | DFS + 贪心】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

[HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

Jupyter Notebook中设置Cell主题

1. 获取本机Jupyter的配置目录 C:\Users\Administrator>jupyter --data-dir C:\Users\Administrator\AppData\Roaming\jupyter2. 进入获取的目录,创建指定路径 C:\Users\Administrator>cd C:\Users\Administrator\AppData\Roaming\jupyter C:\Users\Adminis…

机器学习实验二:决策树模型

系列文章目录 机器学习实验一:线性回归机器学习实验二:决策树模型机器学习实验三:支持向量机模型机器学习实验四:贝叶斯分类器机器学习实验五:集成学习机器学习实验六:聚类 文章目录 系列文章目录一、实验…

kafka 3.x 学习笔记

kafka 3.x 学习笔记 在 kafka 2.8.0 版本之前,安装使用 kafka 需要配套安装 zookeeper,但在 2.8.0 版本之后,不再需要安装 zookeeper,本次学习笔记采用的 kafka 版本为 3.0.0。 文章目录 kafka 3.x 学习笔记一、kafka 定义1 什么是…

学习Opencv(蝴蝶书/C++)——4.图形和大型数组类型(上)

文章目录 1. cv::Mat类的成员变量1.1 flags1.2 cv::Mat::step2 存储方式,存储位置计算2.1 存储方式2.2 🌈存储位置计算2.2.1 基本计算公式2.2.1 step代码说明2.2.3 内存地址计算代码说明3 创建数据3.0 Mat的构成3.0.1 3.0版本之后的Mat3.0.2 cvMat3.1 构造函数3.2 🌈构造函…

Tomcat的启动关闭及日志说明

目录 1 启动Tomcat 1.1 启动 1.2 检查Tomcat启动是否正常 1.3 浏览器访问 2 关闭Tomcat 3 Tomcat日志说明 3.1 catalina.out 3.2 localhost.[日期].log 3.3 host-manager.[日期].log 3.4 manager.[日期].log 3.5 localhost_access_log.[日期].txt 1 启动Tomcat 1.1 启动 在…

Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…

自动采集发布,轻松博客运营——Zblog插件指南

我们是否常常为找不到合适的文章而烦恼?是不是每次写作都要花费大量时间在查找资料上?对于将内容创作作为长期工作来说,保持话题新颖,素材内容充实是很有必要的,ZBlog采集插件可以将这些问题都将化繁为简。 ZBlog是什么…

前端项目中CDN的一些问题【性能优化篇】

1. CDN的概念 CDN(Content Delivery NetWork,内容分发网络),是指利用最靠近每位用户的服务区,更快的将资源发送给用户。 提高用户的访问速度减轻服务器压力提高网站的稳定性和安全性 2. CDN的作用 CDN一般用来托管…

GaussDB数据库SQL系列-序列的使用

目录 一、前言 二、GaussDB数据库中的序列 1、语法(CREATE SEQUENCE) 2、注意事项 三、GaussDB数据库中的示例 1、示例一:创建普通序列 2、示例二:创建与表关联的序列 四、小结 一、前言 在数据库管理中,序列(SEQUENCE&a…

前端开发者眼中的Node.js未来发展趋势

前言 随着互联网的高速发展,前端开发领域的技术也在不断演进,各种各样的前端技术日新月异,前端框架也是层出不穷。在这个变化的过程中,Node.js作为一种强大的服务器端运行环境,已经成为前端开发者的重要技术之一&#…

netty源码:(4)ServerBootstrap

ServerBootstrap的group方法用来给成员变量赋值,如下图 AbstractBootstrap为ServerBootstrap的父类。 ServerBootstrap的channel方法用来设置channelFactory成员变量(在父类AbstractBootstrap里) ServerBootstrap的childHandler方法用来给本类的成员…

MySQL笔记-第05章_排序与分页

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第05章_排序与分页1. 排序数据1.1 排序规则1.2 单列排序1.3 多列排序 2. 分页2.1 背景2.2 实现规则2.3 拓展 第05章_排序与分页 讲师&#…

HNU-电路与电子学-2021期末A卷(不含解析)

【写在前面】 电路与电子学好像是从2020级开设的课程,故实际上目前只有2020与2021两个年级考过期末考试。 本份卷子的参考性很高,这是2020级的期末考卷。题目都是很典型的,每一道题都值得仔细研究透。 特别注意:看得懂答案跟写得…

【C++】map和set的使用及注意事项

map和set的使用及注意事项 1.关联式容器2. 键值对3.set3.1接口介绍3.1.1构造3.1.2迭代器3.1.3容量3.1.4修改 3.2set使用及注意事项 4.multiset5.map6.multimap349. 两个数组的交集 1.关联式容器 在初阶阶段,我们已经接触过STL中的部分容器,比如&#xf…

【EI会议征稿中】2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024)

2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024) 2024 4th International Conference on Digital Signal and Computer Communications 第四届数字信号与计算机通信国际会议(DSCC 2024)将于2024年4月12日至14日在中国-香港举行。DSCC 2024旨…

什么是Amazon Lambda(无服务器计算服务)

Lambda 在高可用性计算基础设施上运行代码,用于执行计算资源的所有管理工作。这包括服务器和操作系统维护、容量调配和弹性伸缩、代码和安全补丁部署以及代码监控和日志记录。您只需要提供代码。 最近亚马逊云服务提供了超多免费的云服务,快来领取免费套…