包含 OpenSSL 作为静态库,但它仍在寻找 DLL?

min*_*ief 5 dll openssl static-libraries visual-studio

我使用以下安装程序在 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"
Run Code Online (Sandbox Code Playgroud)

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

谢谢,-M

ms *_* vt 5

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


Ada*_*eld 1

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

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