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=qnxCMake 定義
-DKANZI_QNX_STDLIB=qnx
GNU。CMakeベースのプラットフォームパッケージは、プラットフォームパッケージアーカイブの名前に
gppを明示的に記載しています。このパッケージを使用してアプリケーションを構築する際は、次を使用してください:
SCons フラグ
--stdlib=gnuCMake 定義
-DKANZI_QNX_STDLIB=gnu
Kanzi プラットフォームパッケージは、これらのライブラリリンクオプションをサポートしています。
静的。
sconsフラグはありません。デフォルトのオプションです。静的にリンクされたライブラリを使用してアプリケーションをビルドするには、CMake 定義
-DKANZI_BUILD_SHARED_LIBS:BOOL=OFFを使用します。ダイナミック。
動的リンクライブラリを使用してアプリケーションを構築するには、次を使用します:
SCons フラグ
--dynamicCMake 定義
-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 アプリケーションをビルドするには:
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 を開きます。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 にデプロイするには:
Kanzi アプリケーションを QNX 用にビルドします。QNX用の Kanzi アプリケーションの構築 を参照してください。
QNXデバイスをコンピュータに接続します。
<ProjectName>/Application/outputディレクトリから QNX ターゲットデバイスにコピーします。Kanzi アプリケーション exe ファイル
Kanzi アプリケーションが使用する kzb ファイル
Kanzi アプリケーションが使用するすべての kzb ファイルのリストを含む
application.cfgファイル
QNXターゲットデバイスでコマンドラインを開き、そのデバイス上の Kanzi アプリケーションに実行権限を追加します。
// Adds execution rights on the QNX target device // for the Kanzi application called MyApplication. chmod 755 MyApplication
コマンドラインで、QNXターゲットデバイス上でアプリケーションを起動します。
// Starts the Kanzi application called MyApplication. ./MyApplication
画面表示情報の印刷¶
Kanzi アプリケーションのために、QNX Screen ディスプレイ情報を一覧表示できます。
画面表示情報を印刷するには:
Deploy your Kanzi application to QNX. See Kanzi アプリケーションを QNX デバイスにデプロイする.
-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定義を追加してください。