构建 Qt for QNX

设置 QNX SDP

构建 Qt 6 需要从QNX 网站下载并安装 QNX SDP。

注: 需要合适的许可证。更多信息请联系 QNX

注: 请勿将 QNX 软件中心的试验性 Wayland 软件包添加到 QNX SDP 8.0 安装程序中。编译 Qt 不需要这些软件包,但它们会在配置 Qt 编译时引起头文件冲突。

编译器和工具链的其他部分由 SDP 软件包提供。在终端运行 SDP 安装文件夹中的 QNX 安装脚本,初始化编译环境,如下所示:

source qnxsdp-env.sh

或在 Windows 命令外壳中运行 qnxsdp-env.bat。

主机构建

交叉编译 Qt 需要 Qt 的主机构建。这是因为在编译过程中,某些工具(如moc,rcc,qmlcachegenqsb )会从主机编译中调用。您有两种选择:

为 QNX 创建工具链文件

要使用 CMake 交叉编译项目,你需要一个工具链文件。该 CMake 语言文件可为平台名称、编译器/链接器和许多其他工具链特定内容设置正确的值。您可以从源码包coin/provisioning/common/shared/cmake_toolchain_files中找到 CI 中使用的工具链文件,以供参考。

set(CMAKE_SYSTEM_NAME QNX)
set(CMAKE_SYSTEM_PROCESSOR armle-v7)
set(arch gcc_ntoarmv7le)

set(CMAKE_C_COMPILER qcc)
set(CMAKE_C_COMPILER_TARGET ${arch})
set(CMAKE_CXX_COMPILER q++)
set(CMAKE_CXX_COMPILER_TARGET ${arch})

set(CMAKE_FIND_ROOT_PATH $ENV{QNX_TARGET};$ENV{QNX_TARGET}/${CMAKE_SYSTEM_PROCESSOR})

set(CMAKE_SYSROOT $ENV{QNX_TARGET})

示例文件是armv7le 。其他可能性包括aarch64lex86_64 ,具体取决于您的目标架构。

注意: Cmake 无法在 QNX 上正确传递 STRIP、AR、RANLIB 和 NM 变量,因此如果使用,需要在工具链文件中单独指定。

配置和构建 QNX 版 Qt

要配置和构建 QNX 版 Qt,你需要具备以下条件:

  • 用于构建 Qt 的工具(如"构建 Qt 源代码 "中所述)已就位,并能在主机平台上正常运行。
  • 工具链文件,本例中为$HOME/qnx.cmake
  • 已签出或安装的 Qt 源代码,本例中为$HOME/qt
  • Qt 的主机构建,本例中为$HOME/qt-host
  • 本地系统上 Qt 构建安装位置的前缀,本例中为$HOME/qnx-install
  • 目标设备上 Qt 构建部署位置的前缀,本例中为/qt

创建并切换到build 目录后,运行以下操作:

$HOME/qt/configure -nomake examples -nomake tests \
-qt-host-path $HOME/qt-host \
-extprefix $HOME/qnx-install \
-prefix /qt \
-- -DCMAKE_TOOLCHAIN_FILE=$HOME/qnx.cmake  \
-DCMAKE_SYSTEM_VERSION=710  \
$HOME/qt

自 Qt 6 以来,configuration 工具是 CMake 的包装器,在实践中,此 configure 命令等同于以下直接 CMake 调用:

cmake -GNinja -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF \
-DQT_HOST_PATH=$HOME/qt-host \
-DCMAKE_STAGING_PREFIX=$HOME/qnx-install \
-DCMAKE_INSTALL_PREFIX=/qt \
-DCMAKE_TOOLCHAIN_FILE=$HOME/qnx.cmake  \
-DCMAKE_SYSTEM_VERSION=710  \
$HOME/qt

根据 QNX SDP 版本选择 CMAKE_SYSTEM_VERSION 的值:

  • 710 表示 QNX SDP 7.1
  • 800 表示 QNX SDP 8.0

如果只使用一种 QNX 版本,也可在工具链文件中定义 CMAKE_SYSTEM_VERSION。

注意: 在 Windows 上编译时,需要明确禁用 PCH(预编译头文件),因为启用它会导致 QNX 编译器崩溃。要禁用 PCH,请使用配置选项-no-pch

注: 如果使用 QNX SDP 8.0,请使用配置选项-skip qtmultimedia -skip qtspeech -skip qtremoteobjects -skip qtinterfaceframework 跳过不支持的模块及其依赖模块。

配置无误后,运行以下程序构建 Qt:

cmake --build . --parallel

注意: QNX 编译器所需的内存可能比主机编译器更大。编译时,请使用--parallel <numOfProcesses> 限制并发进程的最大数量。

编译完成后,运行以下程序:

cmake --install .

这会将结果安装到$HOME/qnx-install 。在那里,您可以使用Qt Creator 、直接使用 scp 或其他方法将 Qt XML 编译结果部署到目标设备上。-prefix 配置参数(示例中为 /qt)定义了目标设备上的部署位置。

为目标设备构建应用程序

完成 Qt 构建并将其安装到暂存位置后,就可以构建示例或应用程序了。

使用 CMake,在暂存位置的 bin 目录(示例中为$HOME/qnx-install )中使用生成的qt-cmake 脚本配置应用程序的构建,然后运行 ninja。例如

$HOME/qnx-install/bin/qt-cmake .
cmake --build .

然后,你就可以将生成的应用程序二进制文件部署到设备上。使用qt-cmake 辅助脚本非常方便,因为该脚本可确保加载用于构建 Qt 的工具链文件,因此无需为每个应用程序重复指定。

如果您使用的 Qt 安装尚未在您的机器上构建,qt-cmake 需要知道目标平台的 CMake 工具链文件的位置。

在这种情况下,请按如下方法设置QT_CHAINLOAD_TOOLCHAIN_FILE 变量,指示qt-cmake 链式加载自定义工具链文件:

$HOME/qnx-install/bin/qt-cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=$HOME/qnx.cmake .

Qt Creator 中使用尚未在机器中构建的 Qt 安装构建应用程序时,需要将指向本地工具链文件的CMAKE_TOOLCHAIN_FILE 变量添加到工具包配置中(编辑 > 偏好设置 > 工具包)。

有关在使用Qt Creator 时为 QNX 设备连接和添加工具包的更多信息,请参阅连接 QNX 设备

第三方程序库

确保系统镜像包含以下额外的第三方库,这些库并不总是包含在最小的 QNX Neutrino 实时操作系统镜像中:

  • libfontconfig
  • libfreetype
  • libiconv
  • libicui18n
  • libicudata
  • libicuuc
  • libpng16
  • libxml2
  • libsqlite3
  • libssl
  • libcrypto
  • libzstd

注: 这不是 QNX Neutrino 操作系统上 Qt 使用的共享库的完整列表。多个共享库已包含在典型的操作系统镜像中,或由系统的其他部分包含,如Screen

另请参阅 Qt 配置选项配置 Qt

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.