3

我真的希望有人能对我有所帮助,因为这个问题让我完全陷入困境和沮丧。

昨天我在开发盒上安装了一个全新的、闪亮的新 Windows 7 x64。

我安装了 VS2008,Tortoise SVN,进行了结帐,编译了我当前的项目,一切都很好。

但是当我去运行(在 VS 中按 F5 或者只是从 shell 运行 exe)时,我得到一个如下所示的对话框:

悲伤
(来源:aliparr.net

所以我摆弄着,看不到明显的问题。我破坏了depends.exe,认为可能缺少一个dll,我得到了这个:

爱克
(来源:aliparr.net

所以我玩,找到不同版本的 gpsvc.dll 和 ishims.dll 并将它们与 .exe 一起放入,没有运气。

如果我在depends(在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 似乎是在一切都出错之前加载的最后一件事。我需要这个 dll,因为我在应用程序中使用 cURL 来做一些 JSON 通信......

我试过玩移动文件并尝试不同的 dll,但老实说,我在这里表现得有点盲目。有人可以帮助或指出我正确的方向吗?

应该注意这些 dll 和设置在 Windows Vista x64 和 x86 中工作正常 - 这是 Windows 7 的事情吗?

提前非常感谢,完成后我可能还剩下一些头发。


编辑

我现在已经意识到 curl.exe 以与 openldap.dll 完全相同的方式死亡 - 我猜是一些 Windows 7 问题?你/有人可以在不依赖openldap的情况下卷曲吗?是否有另一个轻量级 C/C++ 库可以让我通过 http 获取文档并执行奇怪的 http POST ?

谢谢

4

6 回答 6

3

我自己也有一个非常相似的问题:我正在开发一个 C 程序(使用 MinGW gcc 编译器),它使用 curl 库来执行 http GET 操作。我在 Windows XP(32 位)和 Windows 7(64 位)上对其进行了测试。我的程序在 Windows XP 中运行,但在 Windows 7 中,它崩溃并显示与 OP 相同的 0xc000007b 错误消息。

我在一个精简的程序上使用了 Dependency Walker(只调用了一次 curl 库:)curl_easy_init()。我基本上得到了和你一样的日志,OPENLDAP.DLL 作为崩溃前最后一个成功加载的模块。

但是,似乎我的程序在加载 LIBSASL.DLL 时崩溃了(这是根据 Windows XP 上运行的 Dependency Walker 的日志加载的下一个模块)。

在 Windows 7 上再次查看 Dependency Walker 的日志时,LIBSASL.DLL 确实显示了一个 x64 模块。我设法通过将 DLL 文件的 32 位版本从我硬盘上的另一个应用程序复制到我的程序目录来运行我的程序。

希望这将适用于其他有类似问题的人(如果问题在这些年后仍未解决,也适用于 OP)。如果将 32 位版本的 LIBSADL.DLL 复制到程序目录没有帮助,则另一个模块可能会导致崩溃。在 32 位和 64 位系统上运行 Dependency Walker,并从成功运行的日志中查找模块名称。

于 2011-01-29T23:06:07.167 回答
1

我不能完全回答你的问题,我已经在 Windows 7 Professional 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

我还发现我正在尝试加载 LIBSASL.DLL 的 64 位版本——我的 64 位 Tortoise 发行版附带的版本。我也只需要 curl 来提取一些 JSON 数据。我认为最好的解决方案是从源代码重建 libcurl 并排除 LDAP,因为无论如何我都不需要它。

于 2011-05-16T22:13:55.520 回答
0

libsasl 需要 ieshims.dll,如果你在 openldap 中没有 sasl 支持,则不需要 ieshims.dll。

于 2011-09-22T08:00:52.170 回答
0

类似的问题在这里。DLL 依赖 GPSVC.DLL 和 MSVCR90.DLL。

通过将环境变量路径设置为 C:\Program Files (x86)\Internet Explorer,我设法摆脱了 IESHIMS.dll。当然不应该这样做!

有解决办法吗?

于 2010-04-16T16:53:46.570 回答
0

如果您使用 windows x64,您必须将您的 dll 复制到 c:/windows/SysWoW64。当我想在 windows os 8 中使用 pthreads 时,我遇到了同样的问题。当我将 pthreads dll 复制到 SysWow64 时,程序成功运行。

于 2013-04-10T16:54:07.837 回答