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

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

Kanzi のインストールの一環として、仮想マシン用のQNX 7.0 (x86_64) をダウンロードできます。組み込み用のQNX aarch64およびx86_64は、リクエストに応じて利用可能です。

要件

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

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

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

    • slog2

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

  • SConsベースのプラットフォームパッケージの場合:

    • SCons 3.0.0 から 4.2.0 まで、Python 3.5 以降。

    • SCons 4.3.0以降、Python 3.6以降に対応しています。

  • Cmakeベースのプラットフォームパッケージの場合: CMake 3.21 および Ninja 1.10.x

Kanzi アプリケーションを QNX ターゲットデバイスにデプロイする前に、そのデバイスが QNX Screen サービスを実行していることを確認してください。詳細は http://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.screen/topic/manual/cscreen_about.html を参照してください。

サポートされているビルドシステム、STDLIB実装、およびライブラリリンク

Kanzi プラットフォームパッケージは、これらのビルドシステムをサポートしています。

  • SCons。このプラットフォームパッケージ名には、名前に SCons が含まれていないことに注意してください。

    このプラットフォームパッケージを抽出すると、Engine/configs/platforms/<QNX platform version> ディレクトリに見つけることができます。

    プラットフォームパッケージには、SConstruct ファイルと config.py ファイルが含まれています。

  • CMake。このプラットフォームパッケージには、その名前に -cmake が含まれていることに注意してください。

    このプラットフォームパッケージを抽出すると、Engine/cmake/toolchains/<QNX platform version> で見つけることができます。

    プラットフォームパッケージには、作成に使用されたCMakeオプションをリストした <QNX platform version>.cmake ファイルが含まれています。

Kanzi は、これらのSTDLIB実装に基づいたQNXプラットフォームパッケージを提供します。

  • LLVM。この実装は、プラットフォームパッケージアーカイブの名前にある _cxx または -cxx で認識できます。

    このパッケージを使用してアプリケーションを構築する際は、次を使用してください:

    • SCons フラグ --stdlib=qnx

    • CMake 定義 -DKANZI_QNX_STDLIB=qnx

  • GNU。CMakeベースのプラットフォームパッケージは、プラットフォームパッケージアーカイブの名前に gpp を明示的に記載しています。

    このパッケージを使用してアプリケーションを構築する際は、次を使用してください:

    • SCons フラグ --stdlib=gnu

    • CMake 定義 -DKANZI_QNX_STDLIB=gnu

Kanzi プラットフォームパッケージは、これらのライブラリリンクオプションをサポートしています。

  • 静的。scons フラグはありません。デフォルトのオプションです。

    静的にリンクされたライブラリを使用してアプリケーションをビルドするには、CMake 定義 -DKANZI_BUILD_SHARED_LIBS:BOOL=OFF を使用します。

  • ダイナミック。

    動的リンクライブラリを使用してアプリケーションを構築するには、次を使用します:

    • SCons フラグ --dynamic

    • CMake 定義 -DKANZI_BUILD_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を使用してQNX 7.1用の 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.cmake
          -DPLATFORM_BACKEND=qnx_screen
          -DCMAKE_INSTALL_PREFIX=../bin -DKANZI_QNX_STDLIB=qnx
          -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.cmake
          -DPLATFORM_BACKEND=qnx_screen
          -DCMAKE_INSTALL_PREFIX=../bin
          -DKANZI_QNX_STDLIB=gnu
          -DKanzi_DIR=../../lib/cmake/Kanzi
          -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ..
    cmake --build .
    cmake --install .
    

CMakeを使用してQNX 7.0用の Kanzi アプリケーションを構築する

一部のQNX 7.0をサポートするデバイスでは、すべてのES 3.2機能が正しく動作しないことがあります。これらの問題を回避するために、次の定義を使用してCMakeでGL_ES 3.1用の Kanzi アプリケーションをビルドしてください。

  • -DKANZI_GLES_LINKED:STRING=31

  • -DKANZI_GLES_DLOAD:STRING=31

例えば、CMakeを使用してLinux上でQNX 7.0用の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/qnx700-aarch64.cmake
          -DPLATFORM_BACKEND=qnx_screen
          -DCMAKE_INSTALL_PREFIX=../bin
          -DKANZI_QNX_STDLIB=qnx
          -DKANZI_BUILD_SHARED_LIBS:BOOL=ON
          -DKANZI_GLES_LINKED:STRING=31
          -DKANZI_GLES_DLOAD:STRING=31
          -DKanzi_DIR=../../lib/cmake/Kanzi
          -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ..
    cmake --build .
    cmake --install .
    
  • GNU STDLIB実装を使用し、非cxxプラットフォームパッケージから、静的ライブラリリンクを行う場合:

    cd Engine/applications/kzb_player
    mkdir build
    cd build
    cmake -GNinja
          -DCMAKE_BUILD_TYPE=Release
          -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchains/qnx700-aarch64.cmake
          -DPLATFORM_BACKEND=qnx_screen
          -DCMAKE_INSTALL_PREFIX=../bin
          -DKANZI_QNX_STDLIB=gnu
          -DKANZI_BUILD_SHARED_LIBS:BOOL=OFF
          -DKANZI_GLES_LINKED:STRING=31
          -DKANZI_GLES_DLOAD:STRING=31
          -DKanzi_DIR=../../lib/cmake/Kanzi
          -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ..
    cmake --build .
    cmake --install .
    

SConsを使用してQNX用の Kanzi アプリケーションをビルドする

SConsは、scons コマンドを実行するプラットフォームの構成ディレクトリ内のSConstructファイルを実行します。SConstructファイルはアプリケーションをビルドするためのエントリーポイントであり、Kanzi Engine の場所に関する情報を含み、これらのファイルを実行します。

  • <KanziWorkspace>/Engine/configs/platforms/common/config.py には、すべてのプラットフォーム向けにビルドする際に使用される Kanzi ライブラリ定義と共通ビルドフラグが含まれています。

  • <KanziWorkspace>/Engine/configs/platforms/<PlatformName>/config.py には、Kanzi プラットフォーム固有のビルドフラグと定義、およびツールチェーンが含まれています。このファイルを編集して、プラットフォーム用のビルド構成をカスタマイズします。たとえば、プラットフォーム SDK とボードサポートパッケージの場所を一致させるためです。

  • <ProjectName>/Application/configs/platforms/common/config.py には、オプションでプロジェクト固有の共通設定パラメータが含まれています。

  • <ProjectName>/Application/configs/platforms/<PlatformName>/config.py には、オプションでプロジェクト固有のプラットフォーム構成パラメータが含まれています。

Sconsを使用してQNX用の Kanzi アプリケーションをビルドするには:

  1. Kanzi Studio で File > Open Kanzi Command Prompt を選択し、Kanzi アプリケーション(<ProjectName>/Application/configs/platforms/<PlatformName>)をビルドしたいプラットフォームの構成ディレクトリ内の Kanzi Command Prompt で選択します。

    例えば、Linux用に Kanzi アプリケーションをビルドするには、<ProjectName>/Application/configs/platforms/linux_x11_glx_cpp98 ディレクトリ内の Kanzi Command Prompt を開きます。

  2. Kanzi アプリケーションのビルドパラメータで scons コマンドを実行します。

    構文

    scons <library> <type> <name>

    パラメーター

    library

    (オプション) グラフィックスライブラリ:

    • ES2 は OpenGL ES 2.0 でアプリケーションをビルドします。

    • ES3 は OpenGL ES 3.0 でアプリケーションをビルドします。

    type

    ビルドタイプ (オプション):

    • Release は、コンパイラの最適化が有効になった状態でアプリケーションをビルドします。リリースオプションは、デバッグオプションよりも小さいファイルをビルドします。このオプションは、製品用途に使用します。デフォルト値。

    • Debug は、コンパイラの最適化を無効にし、デバッガで使用できる完全なデバッグ情報を含むアプリケーションをビルドします。デバッグオプションは、より大きなファイルをビルドし、デバッグアプリケーションの実行速度が遅くなります。このオプションは開発目的で使用してください。

    • Profiling は、コンパイラの最適化を有効にしてアプリケーションをビルドし、プロファイリングビルドに対してアプリケーションをリンクします。このオプションは、Kanzi Engine のさまざまな部分のパフォーマンスを測定したい場合に使用します。たとえば、アプリケーションの起動時に Kanzi が異なるタスクにどれだけの時間を使用しているか、またはアプリケーションのどの部分が実行に多くの時間を要するかを知りたい場合です。アプリケーションパフォーマンスの測定 を参照してください。

    name

    プロジェクトの名前を (オプション) します。

    例

    // Builds the application with the default settings as specified
    // in config.py and SConstruct configuration files.
    scons
    
    // Builds the debug version of the application.
    scons debug
    
    // Builds the debug version of the application with the
    // OpenGL ES 3.0 graphics library from the |ks|
    // project named MyProject.
    scons ES3 debug MyProject
    

Sconsは <ProjectName>/Application/output ディレクトリで Kanzi アプリケーションのソースコードとバイナリファイルをビルドします。

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

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

  1. Kanzi アプリケーションを QNX 用にビルドします。QNX用の Kanzi アプリケーションの構築 を参照してください。

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

  3. <ProjectName>/Application/output ディレクトリから 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.
    

    QNXアプリケーションを Kanzi バージョン3.9.4以前用にコンパイルする際、ビルド構成ファイルで非推奨の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 7.0.0を使用し、QNX Software Centerを通じてQNXソフトウェアを更新すると、Kanzi アプリケーションのコンパイルがエラーで失敗します。

    Kanzi-3_6_5-qnx700_screen_aarch64-es3-freetype-static/Engine/include/kanzi/core/cpp/cstdio.hpp:42:12: error: 'std::snprintf' has not been declared
    

    QNXは、std::snprintf がヘッダーファイルに欠落しているというエラーを、ソフトウェア開発プラットフォームのアップデートで導入しました。

    回避策: コンパイルエラーを解消するには、プリプロセッサフラグに -DKZ_USE_C99_SNPRINTF 定義を追加してください。

関連項目

QNXシステムロガー (slogger2)

QnxPipelineID

QnxUsageFlags

アプリケーション開発

Kanzi アプリケーションのデプロイ