2017-03-29 106 views
1

我試圖利用OpenSSL的一些EC加密和ECDSA功能來做一個基本的區塊鏈模擬,但是我遇到了一個重大的障礙。我正在使用Code :: Blocks IDE,並且使用在此處找到的64位二進制文​​件安裝了OpenSSL:https://slproweb.com/products/Win32OpenSSL.htmlMinGW在Code :: Blocks中沒有鏈接靜態OpenSSL庫

在鏈接器設置,我添加的OpenSSL-Win64的\ lib中\ openssl.lib

在搜索目錄>編譯器,我添加的OpenSSL-Win64的\包括

在搜索目錄>鏈接,我添加OpenSSL- Win64 \ lib

但是,當我編譯時,我得到「嘗試使用的每個OpenSSL函數的」未定義的引用(函數名稱)「錯誤。但是,編譯器似乎成功地包含了頭文件,因爲它可以識別像EC_KEY這樣的新數據類型。我懷疑一個鏈接錯誤,但我不知道什麼可能是錯誤的,因爲我有鏈接路徑和靜態庫鏈接如上。

這是我生成日誌:

mingw32-g++.exe -LD:\OpenSSL-Win64\lib -LD:\OpenSSL-Win64\include -LD:\OpenSSL-Win64 -o bin\Debug\BlockchainSim.exe obj\Debug\main.o  obj\Debug\src\Block.o obj\Debug\src\BlockchainNode.o obj\Debug\src\Transaction.o  obj\Debug\src\Valuable.o D:\OpenSSL-Win64\lib\openssl.lib 
obj\Debug\src\BlockchainNode.o: In function `ZN14BlockchainNodeC2Ei': 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:18: undefined reference to `EC_KEY_new_by_curve_name' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:21: undefined reference to `BN_new' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:22: undefined reference to `EC_KEY_set_private_key' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:25: undefined reference to `BN_CTX_new' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:26: undefined reference to `BN_CTX_start' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:28: undefined reference to `EC_KEY_get0_group' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:29: undefined reference to `EC_POINT_new' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:30: undefined reference to `EC_POINT_mul' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:31: undefined reference to `EC_KEY_set_public_key' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:34: undefined reference to `EC_POINT_free' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:35: undefined reference to `BN_CTX_end' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:36: undefined reference to `BN_CTX_free' 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:37: undefined reference to `BN_clear_free' 
obj\Debug\src\BlockchainNode.o: In function `ZN14BlockchainNodeD2Ev': 
F:/School/Barrett/BlockchainSim/src/BlockchainNode.cpp:42: undefined reference to `EC_KEY_free' 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
15 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 

我希望我只是簡單的東西在這裏,因爲我是新來鏈接靜態庫。許多類似的問題似乎通過添加編譯命令的選項來解決,但由於我使用Code :: Blocks並將OpenSSL作爲靜態庫鏈接,所以我不確定這些是否適用於此。任何幫助是極大的讚賞。

+0

你還編譯openssl.lib等與相同的編譯器和標誌? –

+0

不,但由於我使用的二進制文件的性質,這不是必需的。它基本上爲你安裝和編譯OpenSSL。 –

回答

1

想通了。問題是我沒有C:/ MinGW文件夾(因爲Code :: Blocks安裝在它自己的目錄中的MinGW)。我猜想我使用的二進制文件試圖檢測現有的編譯器,並根據它找到的不同編譯庫。

我通過在默認路徑(C:/ MinGW)中安裝默認的MinGW(有MSYS的情況下),然後重新安裝原始問題中鏈接的32位二進制OpenSSL, (C:/ OpenSSL的-的Win32)。這樣做使得在C:/ OpenSSL-Win32/lib文件夾中有一個新的MinGW文件夾,然後我將其包含在鏈接程序搜索目錄中。

+0

我有同樣的問題,你可以添加完整的命令,工作? – Vixxs