Code :: Blocks中的MinGW没有链接静态OpenSSL库

时间:2017-03-29 01:21:07

标签: c++ openssl codeblocks

我正在尝试利用OpenSSL的一些EC加密和ECDSA功能来进行基本的区块链模拟,但我遇到了一个主要的障碍。我正在使用Code :: Blocks IDE,我使用这里的64位二进制文​​件安装了OpenSSL:https://slproweb.com/products/Win32OpenSSL.html

在链接器设置中,我添加了OpenSSL-Win64 \ lib \ openssl.lib

在搜索目录中>编译器,我添加了OpenSSL-Win64 \ include

在搜索目录中>链接器,我添加了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作为静态库链接,我不确定这些是否适用于此。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

想出来。问题是我没有C:/ MinGW文件夹(因为Code :: Blocks在其自己的目录中安装了MinGW)。我猜测我使用的二进制文件试图检测现有的编译器,并根据它找到的内容编译库。

我通过使用默认路径(C:/ MinGW)安装默认MinGW(带有MSYS,如果重要)修复它,然后重新安装原始问题中链接的32位二进制OpenSSL,也在默认路径中( C:/ OpenSSL的-的Win32)。这使得它在C:/ OpenSSL-Win32 / lib文件夹中有一个新的MinGW文件夹,然后我将其包含在链接器搜索目录中。

相关问题