2010-11-02 73 views
3

我安装了OpenSSL 1.0.0在Windows上使用安装程序,请访问: http://www.slproweb.com/products/Win32OpenSSL.html包含OpenSSL作为一个静态库,但它仍然在寻找一个DLL?

我加.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

+0

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

回答

1

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

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

+0

感谢Adam。有没有办法完全消除DLL的需求?我宁愿只使用静态库进行编译,而不必将DLL与应用程序一起分发......顺便说一句,它看起来像库文件是754KB和DLL是1.09MB - 它更大但不是太大。仍然只是一个存根,你觉得呢? – mindthief 2010-11-02 01:51:03

+0

你可以这样做,但是你必须将openssl编译为一个静态库 – taxilian 2011-07-14 23:40:29

3

使用具有几乎19 MB大小的libeay32MT.lib文件作为您的库。因为它是一个静态库,但libeay32.lib是使用dll的库。

+0

请注意,如果你只使用OpenSSL的一小部分,你不必担心其大小。我静态链接24MB大'libeay32MT.lib',但我的结果是1.4MB的大文件。 – 2015-09-22 10:01:22

相关问题