Kanzi アプリケーションを QNX にデプロイする

ターゲットプラットフォーム用の Kanzi アプリケーションをビルドする前に、ターゲットプラットフォーム用の Kanzi ビルド環境をセットアップして構成してください。ビルド環境には、Kanzi ビルドシステムがターゲットプラットフォーム用のアプリケーションをビルドするために使用するツールが含まれています。

要件

Kanzi アプリケーションを QNX にビルドしてデプロイするには、次のものが必要です。

  • QNX ソフトウェア開発プラットフォーム 7.1。

    QNXソフトウェア開発プラットフォームからのライブラリ要件:

    • slog2

    QNX開発ツールは、https://blackberry.qnx.com で入手できます。

  • 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 が含まれます。

    プラットフォームパッケージには、その作成に使用された CMake オプションが記載された Engine/cmake/toolchains/<toolchain_file>.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を使用してQNX 7.1用のLinux上で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. Kanzi アプリケーションを QNX 用にビルドします。QNX用の Kanzi アプリケーションの構築 を参照してください。

  2. QNXデバイスをコンピュータに接続します。

  3. <ProjectName>/Application/bin ディレクトリから、以下を QNX ターゲットデバイスにコピーします。

    • Kanzi アプリケーション exe ファイル

    • Kanzi アプリケーションが使用する kzb ファイル

    • Kanzi アプリケーションが使用するすべての kzb ファイルのリストを含む application.cfg ファイル

  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
    

アプリケーションは各ディスプレイに対してこの情報を出力し、終了します。

  • Display ID

  • ディスプレイがアタッチされているかどうか

  • ディスプレイが取り外し可能かどうか

  • ディスプレイがフォーカスされているかどうか

  • ディスプレイの現在の解像度

  • (オプション) アプリケーションをルートとして実行する場合:

    • 利用可能なすべてのビデオモード

    • 現在のビデオモード

QNXスクリーン使用フラグの設定

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はCXXコンパイラとしてのQCCの使用を非推奨としました。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 アプリケーションのデプロイ