【问题标题】:Included OpenSSL as a static library, but it's still looking for a DLL?将 OpenSSL 作为静态库包含在内,但它仍在寻找 DLL?
【发布时间】:2023-03-21 20:28:01
【问题描述】:

我使用以下位置提供的安装程序在 Windows 上安装了 OpenSSL 1.0.0: http://www.slproweb.com/products/Win32OpenSSL.html

我将 .lib 文件添加到我的项目(这是 Visual Studio,将其添加到项目设置->链接器->输入),它可以编译并正常工作。但是当我删除 Windows\system32 中的 OpenSSL DLL 文件时,它会抱怨

"Debugger:: An unhandled non-continuable STATUS_DLL_NOT_FOUND exception was thrown during process load"

知道为什么即使它是用静态库编译的,它仍然在寻找 DLL 吗?我没有在项目的任何地方引用 DLL。我包含的静态库是 libeay32.lib 和 ssleay32.lib。

谢谢, -M

【问题讨论】:

  • 该发行版中还有静态 .lib 文件,它们的大小 > 10 MB(不知道为什么这么多)。我还没有尝试过,但它似乎是你需要的。

标签: visual-studio dll openssl static-libraries


【解决方案1】:

使用大小接近 19 mb 的 libeay32MT.lib 文件作为您的库。因为它是一个静态库,而 libeay32.lib 是一个使用 dll 的库。

【讨论】:

  • 请注意,如果您只使用 OpenSSL 的一小部分,则不必担心大小。我静态链接了 24MB 大 libeay32MT.lib 但我的结果是 1.4MB 大文件。
【解决方案2】:

它正在寻找 DLL,因为代码是在运行时动态加载的。静态库中的代码只是一组调用 DLL 的存根函数——比较 .lib 和 .dll 文件的大小,我敢打赌你会发现 DLL 更大,因为那是大部分实际的加密代码都是谎言。

因此,正如您所发现的,您不应该删除 DLL。为了正确分发您的程序,您还需要与它一起分发这些 DLL 以使其正常工作。但是,请记住,这样做存在法律问题,因为美国对某些加密代码有出口限制。 因此,在重新分发这些 DLL 时要格外小心 - 请特别确保您所做的事情是合法的

【讨论】:

  • 谢谢亚当。有没有办法完全消除对 DLL 的需求?我宁愿只使用静态库进行编译,而不必将 DLL 与应用程序一起分发……顺便说一句,lib 文件看起来是 754KB,DLL 是 1.09MB——它更大但不是很大。你认为仍然只是一个存根吗?
  • 你可以这样做,但你必须将 openssl 编译为静态库
【解决方案3】:

你可以在这里获取静态库:

http://www.ie7pro.com/openssl/openssl-0.9.8g_static_win32.zip

(见http://www.ie7pro.com/openssl.html)。

这些是使用静态运行时库构建的,因此如果您使用的是 VC++,您可能需要访问:

配置属性--> C/C++--> 代码生成--> 运行库

并选择 /MT 而不是 /MD 以避免链接冲突(或者在链接器--> 命令行--> 附加选项中使用 /NODEFAULTLIB:LIBCMT 等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多