【问题标题】:Crypto++ library and dependency errorCrypto++ 库和依赖错误
【发布时间】:2015-10-18 05:53:37
【问题描述】:

我成功下载并构建了 Crypto++ 库。用depends.exe看,看到如下:

有问题的外部模块的“调用层次结构”似乎是(来自depends.exe):

  • CRYPTOPP.DLL
  • ADVAPI32.DLL
  • USER32.DLL
  • POWRPROF.DLL
  • SETUPAPI.DLL
  • USERENV.DLL
  • GPSVC.DLL

在 Crypto++ 源代码中,我注意到在osrng.h,有一个

#pragma comment(lib, "advapi32.lib")

任何人都可以帮助我理解为什么 DLL 中有一个未解析的外部模块?因此我无法使用它。

【问题讨论】:

  • 你试过运行你的程序吗?显示什么错误信息?

标签: c++ dll encryption dependencies


【解决方案1】:

如果您在使用该库时遇到问题,那肯定不是因为缺少该依赖项。请注意,您列出的层次结构包括 advapi32.dll 和 user32.dll。两者都是几乎每个 Windows 程序都直接需要的 DLL,因此它们显然不可能不可用。

depends.exe 中图标旁边的沙漏表示 DLL 为 delay loaded。延迟加载的 DLL 在实际调用其中的函数之前不会加载,因此完全有可能延迟从不存在但仍有工作程序的 DLL 加载。

【讨论】:

  • 嗨,谢谢,“所以完全有可能延迟从不存在但仍有工作程序的 DLL 加载”,你的意思是什么,不是链接器验证所有编译时存在调用库吗?另外,我同意从depends.exe,看起来有延迟加载的DLL,但是在VS2010中,如果我检查CryptoPP项目的属性页,在链接器->输入部分,我在“延迟加载的DLL”中看不到任何值。 ..如果项目使用延迟加载,我还能在哪里找到?
  • 无论您是否延迟加载,链接器都不会验证 DLL 是否存在。它只检查 .lib 文件。加载 EXE 或 DLL 时,Windows 会检查它链接到的所有 DLL 是否静态存在。
  • CryptoPP 中没有列出“延迟加载的 Dll”的原因是 CryptoPP 本身没有任何延迟加载的 DLL。 cryptopp.dll 链接(例如)advapi32.dll 没有延迟加载,因此如果缺少 advapi32.dll,cryptopp.dll 将无法立即加载。同样,如果缺少 user32.dll,advapi32.dll 将无法加载。但是(例如)如果 gpsvc.dll 丢失,userenv.dll 将不会加载失败。
  • 非常感谢您的意见...但是我仍然不确定问题出在哪里以及该怎么做。我同意cryptopp.dll 不正确几乎是不可能的,但是我该怎么做才能在使用depends.exe 检查dll 时不再出现错误..?
  • 尝试使用 Dependency Walker 查看 notepad.exe 或 Windows 中包含的几乎任何其他内容。您将在那里看到相同的警告。
猜你喜欢
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 2014-12-13
  • 1970-01-01
  • 2022-08-05
  • 2018-04-10
  • 2015-02-10
相关资源
最近更新 更多