作ったアプリケーションの実行
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