Cmake搭建QNX编译环境

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

本文禁止转载

相关推荐

  1. Ubuntu环境Cmake-Libtorch-Torchvision-PCL-VTK-OpenCV

    2023-12-10 17:38:01       23 阅读
  2. 基于 Docker 交叉编译环境

    2023-12-10 17:38:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 17:38:01       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 17:38:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 17:38:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 17:38:01       18 阅读

热门阅读

  1. Python3 基本数据类型 ----20231209

    2023-12-10 17:38:01       29 阅读
  2. mysql中information_schema.tables字段说明

    2023-12-10 17:38:01       37 阅读
  3. GO设计模式——1、简单工厂模式(创建型)

    2023-12-10 17:38:01       35 阅读
  4. 开源软件:JumpServer、DataEase、MeterSphere

    2023-12-10 17:38:01       41 阅读
  5. 【周报2023.12.09】

    2023-12-10 17:38:01       40 阅读
  6. c++ 类和对象-封装意义一

    2023-12-10 17:38:01       36 阅读
  7. 用格里高利公式求给定精度的PI值

    2023-12-10 17:38:01       37 阅读
  8. Vue笔记(一)基础

    2023-12-10 17:38:01       40 阅读
  9. ReactNative如何调用自定义的原生模块

    2023-12-10 17:38:01       41 阅读