私はQML(Qt 5の一部)でいくつかのアプリケーションを作成しました。以前私がした質問(https://softwareengineering.stackexchange.com/questions/213698/deploying-qt-based-app-on-mac-os-x)、OS X にアプリを展開するためのソリューション (macdeployqt ツールを使用) を見つけました。
Windows に Qt4 アプリを展開するのは簡単でした。
- リリースモードでコンパイルしました。
- 必要なライブラリ (DLL) をコピーしました。
- テストして動作しました。
残念ながら、この方法は Qt5 では機能しませんでした (qwindows.dll ファイルにプラットフォーム フォルダーを含めても機能しませんでした)。数日間試した後、あきらめて Qt5 の静的バージョンをコンパイルしました。
再度、動作しませんでした。アプリは Qt がインストールされている PC では動作しますが、「クリーン」な PC ではクラッシュします。補足として、Windows 8/8.1 システムでは、アプリのクラッシュを通知する警告やメッセージは表示されません。ただし、Windows 7 では、アプリケーションがクラッシュしたことを通知するメッセージが表示されます。
Dependency Walker (depends.exe) を実行してみましたが、アプリケーションの静的ビルド内のすべてのライブラリは正常であるように見えました。
Windows 8ではエラーは発生しません。しかし、depends.exeでアプリをプロファイリングすると、QtGui.dllに起因するアクセス違反が発生します。正確なエラーは次のとおりです。
「QT5GUI.DLL」のアドレス 0x61C2C000 で、セカンドチャンス例外 0xC0000005 (アクセス違反) が発生しました。
何か不足しているものはありますか (追加の DLL または構成ファイルなど)?
アプリケーション情報:
- Qt 5.2.1で作成およびコンパイルされました
- Quick/QML を使用します。
- ネットワークモジュールを使用します。
- Webkit モジュールを使用します。
- Bluetoothモジュールを使用します。
- QMLファイルはQuick 2.2で書かれています
ベストアンサー1
Qt 5.2 以降では、windeployqt
使用できるツールがあります。ヘルプを表示するには、コマンド ラインから実行するだけです。ただし、基本的な使用方法は、.exe ファイルを指定すると、それに合わせて Qt の依存関係がコピーされるというものです。
オプションを使用して--qmldir
、ツールに QML ファイルの場所を知らせ、必要な QML 依存関係を判断できるようにします。
テストに関する注意: すべて揃っていることを確認するには、Qt SDKがインストールされていないコンピューターでテストするか、一時的に名前を変更するQt ディレクトリ。そうしないと、アプリケーションがそこから不足しているファイルを見つける可能性があります...