proglog

主にプログラミングに関する断片的メモ

作ったアプリケーションの実行

Qtで作ったアプリケーションとdllの話。
環境は、

Qt creatorでビルドしたサンプルをスタンドアローンで実行しようとすると、
「プロシージャエントリポイント……がダイナミックリンクライブラリ QtCore4.dllから見つかりませんでした。」と言われる。
そこで、「Qt\bin\QtCore4.dll」をコピーしてくる。
んが、同じ。


「Qt\qt\bin\QtCore4.dll」
を入れると、そのエラーは出なくなる。
なんだって同じようなものが二つ入ってるんだろうか。

以降詳細。C:\Qt\2009.01\binに入ってるQt系のdllと、C:\Qt\2009.01\qt\libに入っているdllのバージョンが微妙に違うみたい。ビルド時に前提にしてるのは後者なのだが、前者はSDKインストール時にパスを張ったりしてるとそちらが優先される。ああ、これが噂に聞くDLL hellというやつか。

VikiWiki - Qt

というようなことらしいけど。

その他Qt関係のDLLを適宜コピー。


次に、「libgcc_s_dw2-1.dllがみつからないため」というエラーが出る。
これがどこにもない。
Qtcreator経由だと実行できてるので、どうもよく分からない。

取り敢えず、 TDM-GCCからdw2-coreのパッケージを取得して、中かから取り出してコピー。

しかし、まだQtGuiがどうのこうの、QtCoreがどうのこうのというエラーが出る。
よくみると、「Qt\qt\bin\」のほうに、「libgcc_s_dw2-1.dll」も含めmingwのdllとか全部ある。
しかし、全部そこにあるものと入れ換えてもまだエラー。


dependency walkerで調べてみる。
よくみると、「python25\lib\site-packages\pyqt4\bin\QTCORE4.DLL」が!!!
windows版のpyqtをインストールした時に、パスが先頭に追加されてたらしい。
それでビルド時に優先的に使われたということか。

環境変数pathから当該部分を消して、再起動。
「Qt\qt\bin\」から必要なDLLをコピーして、無事サンプルアプリが起動した。

必須なのは多分

  • QtCore4.dll
  • QtGui4.dll

今回はwebkitを使ったので

  • QtWebKit4.dll
  • QtNetwork4.dll

よく分からんが必要と言われたので

  • phonon4.dll

mingw環境なので

  • mingwm10.dll
  • libgcc_s_dw2-1.dll