Qtの設定 - リリース
概要
Qtで開発したソフトウェアにおいて、ソフトウェアをデプロイする手順を記載する。
デプロイの手順
deployqtを使用する場合
まず、QtプロジェクトをReleaseモードに設定するには、Qt Creatorのメイン画面左にある[プロジェクト] - [ビルド設定]から"Release"を選択する。
この状態において、Qtプロジェクトをビルドまたはリビルドする。
- Windows
- Qt Frameworkをインストールしている場合、リリースするexeファイルに必要なライブラリを集めるwindeployqt.exeを実行する。
- windeployqt.exeは、以下のディレクトリに格納されている。
C:\Qt\QtX.X.X\msvc_<バージョン名>\bin\windeployqt.exe
- Qtをインストールした時に、上記のディレクトリのパスが通っているため、
- PowerShellまたはコマンドプロンプトにて、デプロイするexeファイルがあるディレクトリに移動して、以下のコマンドを実行する。
windeployqt <デプロイするexeファイル名>
- Linux
- Linuxには、Qt Frameworkにlinuxdeployqtが含まれていない。
- しかし、有志が作成したlinuxdeployqtが存在する。
- linuxdeployqtをビルドする場合
- (qmakeのパスを、使用するQtのバージョンに合わせて使用すること)
- https://github.com/probonopd/linuxdeployqt
- linuxdeployqt-*-x86_64.AppImageを使用する場合
- linuxdeployqt-*-x86_64.AppImageをGithubからダウンロードする。
- https://github.com/probonopd/linuxdeployqt/releases
- ターミナルにて、デプロイする実行ファイルがあるディレクトリに移動して、以下のコマンドを実行する。
<linuxdeployqtのインストールディレクトリ>/linuxdeployqt <デプロイする実行ファイル名>
Qtのプロジェクトファイル(.proファイル)において、以下の設定を追記することで、ビルド後に自動でデプロイすることもできる。
# Additional import path used to resolve QML modules in Qt Creator's code model QML_IMPORT_PATH = # Additional import path used to resolve QML modules just for Qt Quick Designer QML_DESIGNER_IMPORT_PATH = # 抽出先フォルダ CONFIG(debug, debug|release) { BUILD_TYPE=debug } CONFIG(release, debug|release) { BUILD_TYPE=release } DESTDIR = $$OUT_PWD/deploy # ターゲットバイナリのパス win32 { TARGET_NAME = $${TARGET}.exe } else: macx { TARGET_NAME = $${TARGET}.app } else: linux { TARGET_NAME = $${TARGET} } TARGET_PATH = $$DESTDIR/$${TARGET_NAME} # リンク後処理の登録 win32 { QMAKE_POST_LINK = $$dirname(QMAKE_QMAKE)/windeployqt $${TARGET_PATH} -qmldir=$$PWD --no-translations$$escape_expand(\n\t) QMAKE_POST_LINK += cd$$escape_expand(\n\t) } else: macx { QMAKE_POST_LINK = $$dirname(QMAKE_QMAKE)/macdeployqt $${TARGET_PATH} -qmldir=$$PWD$$escape_expand(\n\t) QMAKE_POST_LINK += pwd$$escape_expand(\n\t) } else: linux { QMAKE_POST_LINK = linuxdeployqt.AppImage $${TARGET_PATH} -qmldir=$$PWD$$escape_expand -unsupported-allow-new-glibc$$escape_expand(\n\t) QMAKE_POST_LINK += pwd$$escape_expand(\n\t) } message("DESTDIR =$$DESTDIR") message("TARGET =$$TARGET") message("TARGET_PATH =$$TARGET_PATH") message("QMAKE_POST_LINK=$$QMAKE_POST_LINK")
deployqtを使用しない場合
QtプロジェクトをReleaseモードに設定するには、Qt Creatorのメイン画面左にある[プロジェクト] - [ビルド設定]から"Release"を選択する。
この状態において、Qtプロジェクトをビルドまたはリビルドする。
もし、デプロイしたソフトウェアを実行した時、以下のようなエラーが出力される場合がある。
xxx.soファイルがないためプログラムを開始できません。 または xxx.dllファイルがないためプログラムを開始できません。
この時、以下のコマンドを実行して、どのようなライブラリが欠如しているかを確認する。
必要なライブラリの一覧が出力されるので、エラーメッセージにしたがって、必要なライブラリを実行ファイルと同じディレクトリに配置する。
objdump -p <実行ファイル名> | grep -iE "(\.so|\.dll)"
PC環境や使用する機能によって、必要なライブラリが異なる。
例えば、SVG機能を使用する場合、Qt5Svg.dllを配置する。
Windowsの場合、必要なライブラリを確認するには、Dependency Walkerを使用することを推奨する。
http://www.dependencywalker.com/
Dependency Walkerは、メイン画面左に必要なライブラリの一覧、メイン画面右に各ライブラリで使用している関数の情報が表示される。
欠如しているライブラリは赤で表示されるため、その情報を元にライブラリを配置することができる。
また、ライブラリで定義されていないにも関わらず使用されている関数は赤で表示されるため、その情報からエラーの原因を探ることにも役立つ。
QtのLGPLライセンスについて
Qtには、商用利用できる有償版とLGPLライセンスの無償版の2種類が提供されている。
無償版のQtでは、無料で配布可能なソフトウェアを開発できるが、守るべき事項がいくつかある。
- Qt 4.5以降でLGPL版が使える。
- LGPL版を使っていることを明記する。
- LGPLライセンスの静的ライブラリを使用する場合、ソフトウェアのソースコードおよびオブジェクトファイルを公開する。
- LGPLライセンスの動的ライブラリを使用する場合、暗黙的リンクおよび明示的リンクいずれも公開しなくても構わない。
これは、Qtはライブラリ群であるため、開発するソフトウェアに対して、Qtライブラリのヘッダファイルをインクルードしなければはならないが、
例外規定があり、ヘッダファイルのインクルードはLGPLの適用は不要とされているため、
インクルードによりLGPLにしなくてはならないという事態は避けることができる。 - 既存のQtライブラリを変更する場合、ソースコードを公開しなければならない。
- 無償版のQtで開発したソフトウェアのリバースエンジニアリングを禁止してはならない。
- 同一プロジェクト内で、有償版Qtを使用する開発者がいる場合、他の開発者が無償版Qtを使用することはできない。
Qtを使用して作成したソースコードに共通部分がある場合、同一プロジェクトとみなされる。 - 無償版のQtで開発をした後、同一プロジェクトを有償版のQtに移すことはできない。
- Qt 5.7以降において、Qt WebEngineの一部とQt SerialPortを除いたLGPL v2.1が適用されているすべての既存モジュールが、LGPL v3に変更されている。
また、Qt 5.7以降のQt Charts、Qt Data Visualization、Qt Virtual Keyboard、Qt Purchasing、Qt Quick 2D Rendererの各モジュールはGPL v3で提供されている。
多くの場合において、LGPLライセンスの静的ライブラリを使用しない場合、ソフトウェアのソースコードは公開しなくてもよい可能性が高い。
上記に記載したことを守れば、無償版のQtで開発したソフトウェアでも商用利用することができる。
表. Qtのライセンスモデル
商用ライセンス | LGPL v2.1 / v3 | GPL v3 | |
---|---|---|---|
開発ライセンス | 有償 | 無償 | 無償 |
ランタイムライセンス | 必要 | 不要 | 不要 |
プロプライエタリ開発 | 可能 ソースコード公開不要 |
可能 ただし、LGPLの義務を準拠のこと |
不可 GPL条件に準拠した開発かつソースコード公開も必要 |
Qtソースコードを改変した際の公開義務 | なし | あり | あり |
バージョンアップ | 保守契約に基づき提供 | 無償にて提供 | 無償にて提供 |
技術サポート | サポ-ト契約に基づき提供 | 別途有償にてSRAより提供 | - |
リバースエンジニアリングの禁止 | 可能 | 不可 | - |
Qt使用の明示義務 | なし | あり | あり |
Qt自体の配布義務 | なし | あり | あり |
コードでの差異 | Qt Charts、Qt Data Visualization、Virtual KeyBoard、Qt Quick Compiler等の商用版、GPL v3限定のアドオン (Qt 5.15.2時点) |