将 Kanzi 应用程序部署到 QNX

在您可以为目标平台构建 Kanzi 应用程序之前,请为目标平台设置和配置 Kanzi 构建环境。构建环境包括 Kanzi 构建系统用于为目标平台构建应用程序的工具。

要求

要构建和部署 Kanzi 应用程序到 QNX,您需要:

  • QNX 软件开发平台 7.1。

    QNX 软件开发平台的库要求:

    • slog2

    您可以在 https://blackberry.qnx.com 获取 QNX 开发工具。

  • 对于基于 CMake 的平台包:CMake 3.25 和 Ninja 1.10.x

在将 Kanzi 应用程序部署到 QNX 目标设备前,确保该设备正在运行 QNX Screen 服务。请参阅 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.screen/topic/manual/cscreen_about.html。

支持的构建系统、STDLIB 实现和库链接。

Kanzi 平台包支持这些构建系统:

  • CMake。请注意,此平台包的名称中包含 -cmake。

    平台包包含 Engine/cmake/toolchains/<toolchain_file>.cmake 文件,其中列出了创建该平台包时使用的 CMake 选项。

Kanzi 提供基于以下 STDLIB 实现的 QNX 平台包:

  • LLVM。平台包会在平台包归档文件的名称中明确标注 cxx。

  • GNU。平台包会在平台包归档文件的名称中明确标注 gpp。

Kanzi 平台包支持这些库链接选项:

  • 静态。

    要构建使用静态链接库的应用程序,请使用 CMake 定义 -DBUILD_SHARED_LIBS:BOOL=OFF。如果未指定 BUILD_SHARED_LIBS 选项,则默认使用此设置。

  • 动态。

    要构建使用动态链接库的应用程序,请使用 CMake 定义 -DBUILD_SHARED_LIBS:BOOL=ON

在 QNX 上使用 LLVM C++ 库时,当您在 Kanzi 应用程序中使用具有插件依赖项的 kzb 文件时,请不要使用运行时链接器。在构建应用程序可执行文件时,将插件 SO 链接到应用程序。请参阅 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.sys_arch/topic/dll.html 和 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/q/qcc.html。

为 QNX 构建 Kanzi 应用程序。

使用 CMake 构建 Kanzi 应用程序

例如,使用 CMake 在 Linux 上为 QNX 7.1 构建 kzb_player 应用程序:

  • 使用 LLVM STDLIB 实现,从 -cxx 平台包中,使用共享库链接:

    cd Engine/applications/kzb_player
    mkdir build
    cd build
    cmake -GNinja
          -DCMAKE_BUILD_TYPE=Release
          -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchains/qnx710-aarch64-cxx-qnx_screen.cmake
          -DCMAKE_INSTALL_PREFIX=../bin
          -DKANZI_BUILD_SHARED_LIBS:BOOL=ON
          -DKanzi_DIR=../../lib/cmake/Kanzi
          -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ..
    cmake --build .
    cmake --install .
    
  • 使用 GNU STDLIB 实现,从 Non-cxx 平台包:

    cd Engine/applications/kzb_player
    mkdir build
    cd build
    cmake -GNinja
          -DCMAKE_BUILD_TYPE=Release
          -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchains/qnx710-aarch64-gpp-qnx_screen.cmake
          -DCMAKE_INSTALL_PREFIX=../bin
          -DKanzi_DIR=../../lib/cmake/Kanzi
          -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ..
    cmake --build .
    cmake --install .
    

将 Kanzi 应用程序部署到 QNX 设备

要将 Kanzi 应用程序部署到 QNX:

  1. 为 QNX 构建您的 Kanzi 应用程序。请参阅 为 QNX 构建 Kanzi 应用程序。。

  2. 将 QNX 设备连接到计算机。

  3. 从 <ProjectName>/Application/bin 目录将以下文件复制到您的 QNX 目标设备:

    • Kanzi 应用程序 exe 文件

    • 您的 Kanzi 应用程序使用的 kzb 文件

    • application.cfg 文件,其中包含您的 Kanzi 应用程序使用的所有 kzb 文件的列表。

  4. 在您的 QNX 目标设备上打开命令行,并为该设备上的 Kanzi 应用程序添加执行权限:

    // Adds execution rights on the QNX target device
    // for the Kanzi application called MyApplication.
    chmod 755 MyApplication
    
  5. 在命令行上,启动您 QNX 目标设备上的应用程序:

    // Starts the Kanzi application called MyApplication.
    ./MyApplication
    

打印屏幕显示信息

您可以列出您的 Kanzi 应用程序的 QNX Screen 显示信息。

要打印屏幕显示信息:

  1. Deploy your Kanzi application to QNX. See 将 Kanzi 应用程序部署到 QNX 设备.

  2. 使用 -enum-qnx-displays 命令行参数运行应用程序:

    ./MyApplication -enum-qnx-displays
    

该应用程序为每个显示器打印此信息并退出:

  • 显示 ID

  • 显示器是否已连接

  • 显示器是否可拆卸

  • 显示器是否聚焦

  • 显示器的当前分辨率

  • (可选) 如果您以 root 身份运行应用程序:

    • 所有可用的视频模式

    • 当前视频模式

设置 QNX Screen 使用标志

您可以以编程方式设置 QNX Screen 属性的使用标志。Screen 使用标志是您可以用来约束分配的 QNX 窗口缓冲区的属性。请参阅 QnxUsageFlags。

QNX 上的已知问题

  • 当您运行多个 Kanzi 应用程序并收到如下错误时

    error:generic:/home/admin/ws/0/ui/Engine/source/core.ui/platform/windowing/qnx_screen/kzs_window_native.cpp:179> Unable to retrieve window size
    
    Process 1482838 (ClusterApp) terminated SIGSEGV code=1 fltno=11 ip=000000121378c348(/var/data/j01/bin/kanzi/./ClusterApp@_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev+0x0000000000007d78) mapaddr=00000000004d4348. ref=0000000000000010
    

    在每个 Kanzi 应用程序中,您必须将 NativeWindowProperties::groupName 设置为唯一的名称。请参阅 GroupName。

  • QNX 不再推荐使用 QCC 作为 CXX 编译器。编译 QNX 应用程序时会失败,并出现错误

    QCC is not a full path and was not found in the PATH.
    

    为 3.9.4 之前的 Kanzi 版本编译 QNX 应用程序时,请在构建配置文件中将已弃用的 QCC 编译器命令替换为 q++ 命令。

    • 对于 CMake,编辑 Engine/cmake/toolchains/qnx7*.cmake,替换

      set(CMAKE_CXX_COMPILER QCC)
      

      通过

      set(CMAKE_CXX_COMPILER q++)
      
    • 对于 SCons,编辑:

      • Engine/configs/platforms/qnx/config.py,替换

        default.env["CC"] = os.path.join(toolchain_bin, "QCC")
        default.env["CXX"] = os.path.join(toolchain_bin, "QCC")
        

        通过

        default.env["CC"] = os.path.join(toolchain_bin, "q++")
        default.env["CXX"] = os.path.join(toolchain_bin, "q++")
        
      • Engine/scripts/build.py,替换

        re.compile(r'^([^/]*/)*QCC$'),
        

        通过

        re.compile(r'^([^/]*/)*q\+\+$'),
        

另请参阅

QNX 系统记录器 (slogger2)

QnxPipelineID

QnxUsageFlags

应用程序开发

部署 Kanzi 应用程序