我使用以下版本的安装程序在Windows上安装了OpenSSL 1.0.0: http://www.slproweb.com/products/Win32OpenSSL.html
我将.lib文件添加到我的项目中(这是Visual Studio,将其添加到Project Settings-> Linker-> Input),它编译并正常工作。但是,当我删除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
答案 0 :(得分:4)
使用大小近19 MB的libeay32MT.lib文件作为您的库。因为它是一个静态库,但libeay32.lib是一个使用dll的库。
答案 1 :(得分:1)
它正在寻找DLL,因为代码是在运行时动态加载的。静态库中的代码只是一组调用DLL的存根函数 - 比较.lib和.dll文件的大小,我打赌你会看到DLL更大,因为那是大部分实际加密代码都在。
因此,正如您所发现的,您不应该删除DLL。为了正确分发程序,您还需要使用它分发这些DLL,以使其正常工作。但是,请记住,执行此操作存在法律问题,因为美国对某些加密代码存在出口限制。 因此,在重新分发这些DLL时要格外小心 - 更加确定您所做的事情是合法的。
答案 2 :(得分:1)
您可以在此处获取静态库:
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等 - >命令行 - >其他选项)。