7

Windows 7 64 ビット (msvc 2010 を使用) で Qt Creator を使用して Qt 5 アプリケーションを構築しました。アプリケーションは私のコンピューターでは完全に動作しますが、他のコンピューターでは動作しません。

Dependency Walkerで不足していると表示されたすべての .dll をプログラム フォルダーにコピーしましたが、エラーは発生しませんが、アプリケーションは実行されません。

Windows XP と Windows 7 64 および 32 ビットでテストしました。
何が問題なのかを調べるにはどうすればよいですか?

更新: Qt 4.8.4 (vs 2008) と msvc 2008 Express をインストールし、それをコンパイルして、Qt4 の .dll を使用して他のコンピューターで実行します。多分誰かがQt5の問題を知っています...

4

5 に答える 5

6

私も同じ問題を抱えていました。

qwindows.dll と qminimal.dll を含む「プラットフォーム」ディレクトリを実行可能ディレクトリに含める必要があります。ディレクトリは「plugins」フォルダの下にあります。

これを追加しないと、アプリケーションがロードされたように見え、リターン コード 0 で終了します。DLL は遅延ロードされるため、依存関係ウォーカーは役に立ちません。

于 2013-06-17T21:16:55.770 に答える
3

私は同じ問題を抱えていました.Dependency Walkerによって報告されたすべてのDLLを追加しましたが、プログラムは実行時にエラーメッセージなしですぐに終了しました.

libEGL.dllプログラムディレクトリに追加したところ、正常に実行されるようになりました。

私はそれlibEGL.dllが他のDLLの1つによって動的にロードされていると推測しています-おそらくlibGLESv2.dll、すべての既知の依存関係の中で最も類似した名前(!)を持っていることに基づいて-そしてその動的ロードはDependency Walkerが検出できるものではありません.

于 2013-04-20T19:51:07.393 に答える
1

私も同じ問題を経験し、この記事から MinGW GCC 4.7 が Qt 5.0 以降と互換性がないことを知りました。私はあなたと同じアプローチをとり、動作する Qt Creator 4.8 に切り替えました。

于 2013-03-03T19:43:02.597 に答える
0

私も同じ問題を抱えていて、DLL の欠落メッセージと Dependency Walker の両方を試しましたが、役に立たなかったか、適切に使用したかどうかわかりません。以下の方法は、(特定のシナリオで)解決するのに役立ちました。この方法は、いくつかの最小限のケースで機能します。

シナリオ

  1. QT クリエーター 3.3.2
  2. QT 5.4.1 (MSVC 2010、32 ビット)、Windows 8.1 OS
  3. dll の動的ロードを使用しない
  4. サードパーティの dll を使用していません
  5. QTWidget アプリケーションです。

方法(キットMinGW 32ビットとMSVC2012 OpenGL 32ビットの両方で試しました)

  1. アプリケーションをビルドした後、リリース exe を取得します。必要な別のフォルダーにコピーして貼り付けます(Z:\ abcと仮定します)
  2. Qt キット (MinGW または MSVC) がインストールされたフォルダーに移動します (私の場合: Z:\Qt\5.4\mingw491_32 (または) Z:\Qt\5.4\msvc2012_opengl)
  3. *.dll を検索
  4. DLL をすべてコピーして、exe を配置したフォルダーに貼り付けます。つまり (z:\abc)
  5. アプリケーションを実行します (私の場合は正常に起動しました)。
  6. アプリケーションの実行中に、コピーしたすべての DLL ファイルを削除します。

    6.1) 削除中、アプリケーションで使用されている DLL ファイル(使用中のファイル)のプロンプトがウィンドウに表示されます。これらの DLL は最初にロードされたものです。それらのファイルはそのままにしておきます。

    6.2) 他の DLL ファイルは、要求どおりに削除されます。

  7. アプリケーションを閉じて、再度開きます (私の場合は正常に起動しました)。
  8. ここで、必要な DLL を取得しました。

これは適切な方法ではありませんが、場合によっては役立つことがあります。

ノート

すべての DLL をコピーしているときに、ファイルが既に存在するというメッセージが表示された場合、システムが決定するように、両方のファイルを別の名前にしておきます。アプリケーションが実行されない場合は、これらの名前を変更したファイルで試すことができます。

于 2015-07-16T07:19:48.627 に答える