Cmake搭建QNX编译环境
  qeEhiKq3pz99 2023年12月10日 19 0


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目录。

Cmake搭建QNX编译环境_cmake


这样我们就找到了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搭建QNX编译环境_json_02


切记,cmake里面的编译器设置千万不可以直接指定里面的gcc/g++工具,会出现很多头文件找不到,库链不到的错误。使用qcc编译,通过设置编译参数来选择性编译。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月10日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   77   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   54   0   0 C++
  yZdUbUDB8h5t   2024年04月29日   54   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   41   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   54   0   0 C++
qeEhiKq3pz99
作者其他文章 更多