2015-09-22 110 views
0

我試圖編譯在Visual Studio 2010中的網絡dll項目在過去,原作者用於項目生成獨立dll文件,就可能與它被用於服務器進行分發。如果我打開他們dll,我易拉罐看到這樣的Dependency Walker(紅色的物品是不是一個真正的問題,該dll工程):如果沒有整個OpenSSL庫,我可以使用河豚嗎?

image description

現在我試圖編譯該項目,但對於32位和64位(64位和什麼是我應該去工作),我產生一個需要安裝的OpenSSL庫:

image description

試圖把libeay32.lib出構建的正義事業鏈接錯誤:

1> Finished searching libraries 
1>TTClient.obj : error LNK2001: unresolved external symbol _BF_set_key 
1>TTProtocol.obj : error LNK2001: unresolved external symbol _BF_ecb_encrypt 
1>D:\techsys\WebSightR220lib\Release\WebSightR220lib.dll : fatal error LNK1120: 2 unresolved externals 
+0

我曾經無數次從櫻桃採摘的OpenSSL獲得特定算法。它當然有效。較小的替代可能是LibTomCrypt – 0xC0000022L

+0

@ 0xC0000022L因爲我真的只是想編譯現有(巨大)的項目,改變libaries似乎是一個問題。實際上,如果我沒有得到任何答案,我將鏈接19MB靜態庫。 –

+0

我OpenSSL的知識是有限的,但使用[單獨執行(https://www.schneier.com/blowfish-download.html)的可能性? –

回答

0

原來聯看似巨大的靜態庫是沒有什麼大問題,當你想使用OpenSSH的只是一小部分。編譯器不會僅僅在二進制文件中複製這個庫,它只會選擇需要的部分。

+0

通常情況下,如果**鏈接器**(不是編譯器)看到的符號不是必需的,並且支持LTO,情況確實如此。但是你的問題意味着你在一個不是這種情況或者你的配置阻止它工作的環境中工作(例如調試)。 – 0xC0000022L

+0

@ 0xC0000022L那麼,當我在linux上做同樣的操作時,得到的'.so'庫有20MB,所以它確實取決於環境。然後,我甚至沒有在Linux上編譯任何東西,所以我仍然認爲自己很幸運。 –

+0

有無符號等?事情是,在Windows上,這些天符號總是默認存儲在PDB文件中,如果需要,您可以啓用MAP文件。但在Linux上,符號默認存儲在二進制文件中。你可以使用'objcopy'將它們解壓縮到一個符號文件中。這就是說,你的比較更可能是基於對二進制文件的錯誤假設。另外假設你構建了* OpenSSL的'.so' *,那將會很大。因爲鏈接器無法知道哪些符號可以優化。儘管如此,Windows上的'.dll'也是如此。 – 0xC0000022L

相關問題