2010-11-02 41 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

相關問題