閉じる

アプリケーションを正しく起動できませんでした (0xc000007b)

cURLの Win32向けバイナリパッケージである libcurl-7.19.3-win32-ssl-msvc.zipを Windows7 x64下で使ったときのトラブル。
パッケージに含まれるライブラリを使っていたのだけど、Windows XPで動いていた自作アプリが 0xc000007bエラーで起動できない。
パッケージに含まれる curl.exeを動かしてみても同じエラーになるので原因はパッケージの方にありそう。
ネットで症例を調べてみると「Windows 7 OpenLDAP Curl DLL Dependency Hell」がソレっぽい内容。
Dependency Walkerで curl.exeを調べてみると…32bitな openldap.dllが 64bitな libsasl.dllをリンクしようとしているのがわかる。
んなもの入れたかな?と思って調べてみると、64bit版の tortoisesvnに含まれおり、それを見に行っている模様。*1
それではと、32bit版の tortoisesvnに含まれる libsasl32.dllを libsasl.dllにリネームして curl.exeと同じフォルダへ…エラーが出なくなった。
自作アプリにおいても同様の措置を講じることでエラー解消。
所謂「DLL HELL*2 」にはまったわけだ。
システムディレクトリに入れる DLLはなんとかなっても、ユーザーやアプリケーションが好き勝手にパスを通したディレクトリにある DLLに関しては 32bit/64bit混在環境で地獄の釜が蓋を開けて待っていると。


*1 tortoisesvnが自ディレクトリにパスを通している

*2 狭義には DLLのバージョンを上げたら古いバージョンに依存するアプリで不具合が起きることを示すけど、今回のようにプラットフォーム違いの DLLを読み込めてしまうトラブルも含めて良いと思う。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)