3

この問題で私は完全に立ち往生してイライラしているので、誰かが私を助けてくれることを本当に願っています.

昨日、私は新鮮で光沢のある新しい Windows 7 x64 を開発ボックスにインストールしました。

VS2008 をインストールし、Tortoise SVN をインストールし、チェックアウトを行い、現在のプロジェクトをコンパイルしました。

しかし、実行しようとすると (VS で F5 キーを押すか、シェルから exe を実行するだけで)、次のようなダイアログ ボックスが表示されます。

悲しみ
(出典: aliparr.net )

だから私はいじって、明らかな問題を見ることができません。dll が欠落している可能性があると考えて、depends.exe を無効にすると、次のようになります。

イーク
(出典: aliparr.net )

だから私は遊んで、gpsvc.dll と ishims.dll の異なるバージョンを見つけて、それらを .exe に入れました。

依存関係 (vs の出力ウィンドウに続く) でプロファイルを実行すると、次のようになります。

..
Loaded "c:\windows\syswow64\ADVAPI32.DLL" at address 0x75F20000 by thread 1.  Successfully hooked module.

Loaded "c:\windows\syswow64\LPK.DLL" at address 0x76B20000 by thread 1.  Successfully hooked module.

Loaded "c:\windows\syswow64\USP10.DLL" at address 0x761C0000 by thread 1.  Successfully hooked module.

Loaded "c:\windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4926_none_508ed732bcbc0e5a\MSVCR90.DLL" at address 0x70570000 by thread 1.  Successfully hooked module.

Loaded "c:\users\ali\desktop\repository\development\trunk\spree\bin\debug\OPENLDAP.DLL" at address 0x001E0000 by thread 1.  Successfully hooked module.

Exited "c:\users\ali\desktop\repository\development\trunk\spree\bin\debug\SPREE.EXE" (process 0x5D4) with code -1073741701 (0xC000007B) by thread 1.

したがって、openldap.dll は、すべてがうまくいかなくなる前に最後に読み込まれるようです。アプリケーション内でcURLを使用してJSON通信を少し行うため、このdllが必要です...

ファイルの移動やさまざまな dll を試してみましたが、正直なところ、ここでは少し盲目的に行動しています。誰かが助けてくれたり、正しい方向に向けてくれたりできますか?

これらの dll とセットアップは、Windows Vista x64 および x86 で正常に動作することに注意してください。これは Windows 7 のものですか?

事前に大いに感謝します。これが完了した後、まだ髪の毛が残っている可能性があります.


編集

私は今、curl.exeがopenldap.dllとまったく同じように死ぬことに気づきました.Windows 7の問題だと思いますか? openldapに依存せずにcurlを持っている人はいますか? http 経由でドキュメントをフェッチし、奇妙な http POST を実行できる別の軽量 C/C++ ライブラリはありますか?

ありがとう

4

6 に答える 6

3

私自身も非常によく似た問題を抱えていました.curlライブラリを使用してhttp GET操作を行うCプログラム(MinGW gccコンパイラを使用)を開発していました。Windows XP (32 ビット) と Windows 7 (64 ビット) でテストしました。私のプログラムは Windows XP で動作していましたが、Windows 7 では OP と同じ 0xc000007b エラー メッセージでクラッシュしました。

削除されたプログラムで Dependency Walker を使用しました (curl ライブラリへの呼び出しは 1 つだけです: curl_easy_init())。私は基本的にあなたと同じログを取得しました.OPENLDAP.DLLは、クラッシュ前に最後に正常にロードされたモジュールです。

しかし、LIBSASL.DLL (Windows XP で実行された Dependency Walker からのログによると、次にロードされたモジュール) のロード時にプログラムがクラッシュしたようです。

Windows 7 の Dependency Walker からのログをもう一度見ると、LIBSASL.DLL は確かに x64 モジュールを示しています。ハードディスク上の別のアプリケーションから 32 ビット バージョンの DLL ファイルをプログラムのディレクトリにコピーすることで、プログラムを実行することができました。

うまくいけば、これは同様の問題を抱えている他の人々にとってもうまくいくでしょう(問題が数年経ってもまだ解決されていない場合はOPにも)。32 ビット バージョンの LIBSADL.DLL をプログラムのディレクトリにコピーしても問題が解決しない場合は、別のモジュールが原因でクラッシュが発生している可能性があります。32 ビット システムと 64 ビット システムの両方で Dependency Walker を実行し、成功した実行のログからモジュール名を検索します。

于 2011-01-29T23:06:07.167 に答える
1

私はあなたの質問に完全に答えることはできません。私はWindows7Professional x64でlibcurlをコンパイルしましたが、問題はありません。私はOpenLDAPをサポートしてコンパイルしていないので、そこに問題があると思います。

IEShims.dllに関して、Dependency Walkerは通常、これを欠落しているモジュールとして報告します。正確な理由を思い出せませんが、%Path%に見つからない場合に動的にロードするためのものでした。

ただし、これをデバッグする必要があり、Windows 7を使用している場合は、%ProgramFiles%\ Internet Explorer \ IEShims.dllから%windir%へのハードリンクを試してください。

ただし、スクリーンダンプを見ると、Spree.exeがx64バイナリとしてロードされていないように見えますが、これは非常に適切である可能性があります。エクスポートされた関数のロードとバイナリのパイピングまたはexec()には違いがあります。最初に述べたように、アーキテクチャはインポーターとエクスポーターの両方で同じである必要があります。

于 2011-04-10T06:58:53.343 に答える
1

また、64 ビット バージョンの LIBSASL.DLL (64 ビット Tortoise ディストリビューションに付属しているもの) をロードしようとしていることがわかりました。また、JSON データを少し引き出すために curl だけが必要です。とにかく必要ないので、ソースからlibcurlを再構築し、LDAPを除外するのが最善の解決策になると思います。

于 2011-05-16T22:13:55.520 に答える
0

ここで同様の問題。DLL 依存 GPSVC.DLL および MSVCR90.DLL。

環境変数のパスを C:\Program Files (x86)\Internet Explorer に設定することで、IESHIMS.dll を取り除くことができました。確かにそれはする必要はありません!

これに対する修正はまだありますか?

于 2010-04-16T16:53:46.570 に答える
0

libsasl には ieshims.dll が必要です。openldap で sasl がサポートされていない場合、ieshims.dll は必要ありません。

于 2011-09-22T08:00:52.170 に答える
0

Windows x64 を使用している場合は、dll を c:/windows/SysWoW64 にコピーする必要があります。Windows OS 8でpthreadsを使用したいときに同じ問題が発生しました.pthreads dllをSysWow64にコピーすると、プログラムは正常に実行されました。

于 2013-04-10T16:54:07.837 に答える