2017-03-29 69 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