我有一个应用程序依赖 glew32.lib/.dll 来运行。.lib 位于 VS2005 SDK 目录中,编译时运行良好。.dll 已放置在 C:\windows\system32 中(通过以管理员身份运行的 cmd.exe)。
当我尝试运行该应用程序时,它告诉我计算机上没有 glew32.dll。
我尝试通过 regsvr32.exe 注册 dll,但失败并显示以下消息:
模块“glew32.dll”加载失败。请确保二进制文件存储在指定路径中,或对其进行调试以检查二进制文件或相关 .DLL 文件是否存在问题。找不到指定的模块。
我用 DependencyWalker 找到它,它的唯一直接依赖项是 opengl32.dll。opengl32.dll 被列为缺少两个依赖项(嗯,依赖项的依赖项的依赖项的依赖项)-GPSVC.dll 和 IESHIMS.dll... 都存在,GPSVC.dll 在 system32 中,IESHIMS.dll 在 ../winsxs/x86_microsoft-windows-ie-ieshims-[hex (guid?)] 中
我继续将 IESHIMS.dll 复制到 system32,但无济于事。它仍然不配合。
想法(除了使用 linux 中 ldconfig 可以正常工作.. ;)?
答案1
追踪此类问题的一个好工具是Sysinternals ProcMon(或者更老的 SysInternals FileMon,它在某些镜像站点上可用并且更易于使用)。使用适当的过滤选项,您将能够看到 Windows 正在尝试加载哪些 DLL(以及从哪里加载)。