Windows 7 OpenLDAP卷曲DLL依赖地狱

时间:2009-10-21 05:30:59

标签: windows-7 curl openldap dll

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

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

我安装了VS2008,Tortoise SVN,做了结账,编译了我目前的项目,一切都很好,花花公子。

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

Sadness
(来源:aliparr.net

所以我摆弄着,看不出明显的问题。我破坏了depends.exe,认为可能有一个dll缺失,我明白了:

Eeek
(来源: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是在它出错之前最后加载的东西。我需要这个dll,因为我在应用程序中使用cURL进行一些JSON通信......

我尝试过使用移动文件和尝试不同的dll,但说实话,我在这里表现得有些盲目。有人可以帮忙或指出我正确的方向吗?

应该注意这些dll和设置在Windows Vista x64和x86中运行良好 - 这是Windows 7吗?

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


修改

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

由于

6 个答案:

答案 0 :(得分: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模块。我设法通过将我的硬盘上的另一个应用程序的32位版本的DLL文件复制到我的程序目录来运行我的程序。

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

答案 1 :(得分:1)

我无法完全回答你的问题,我在Windows 7 Professional x64上编译了libcurl,我没有任何问题。虽然我没有使用OpenLDAP支持编译它,所以我想这就是问题所在。

关于IEShims.dll,Dependency Walker通常会将此报告为缺少的模块。不记得确切的原因,但它是在%Path%中找不到它时动态加载的。

如果你需要调试它并且在Windows 7上,那么尝试从%ProgramFiles%\ Internet Explorer \ IEShims.dll到%windir%进行硬链接。

虽然,我在屏幕转储上看到,确实看起来Spree.exe没有作为x64二进制文件加载,这很可能就是这样。加载导出函数和管道或exec()二进制文件有所不同,首先提到的要求导入器和导出器的体系结构相同。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

有没有修复呢?

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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