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混在環境で地獄の釜が蓋を開けて待っていると。