代码中的MinGW::块不链接静态OpenSSL库
MinGW in Code::Blocks not linking static OpenSSL Library
我试图利用OpenSSL的一些EC加密和ECDSA功能来制作基本的区块链模拟,但我遇到了一个主要的障碍。我正在使用代码::Blocks IDE,并且我已经使用此处找到的64位二进制文件安装了OpenSSL:https://slproweb.com/products/Win32OpenSSL.html。
在链接器设置中,我添加了OpenSSL-Win64\lib\openssl.lib
在>编译器的搜索目录中,我添加了OpenSSL-Win64\include
在 Search Directory> Linker 中,我添加了 OpenSSL-Win64\lib
但是,当我编译时,我尝试使用的每个OpenSSL函数都会收到"未定义的引用(函数名称)"错误。但是,编译器似乎成功地包含头文件,因为它可以识别EC_KEY等新数据类型。我怀疑存在链接错误,但我不确定可能出了什么问题,因为我如上所述链接了链接路径和静态库。
这是我的构建日志:
mingw32-g++.exe -LD:OpenSSL-Win64lib -LD:OpenSSL-Win64include -LD:OpenSSL-Win64 -o binDebugBlockchainSim.exe objDebugmain.o objDebugsrcBlock.o objDebugsrcBlockchainNode.o objDebugsrcTransaction.o objDebugsrcValuable.o D:OpenSSL-Win64libopenssl.lib
objDebugsrcBlockchainNode.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'
objDebugsrcBlockchainNode.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 链接为静态库,我不确定这些是否适用于这里。任何帮助将不胜感激。
想通了。问题是我没有 C:/MinGW 文件夹(因为 Code::Blocks 在其自己的目录中安装了 MinGW)。我猜我使用的二进制文件试图检测现有的编译器,并根据它找到的内容以不同的方式编译库。
我通过使用默认路径(C:/MinGW)安装默认的MinGW(使用MSY,如果重要的话)来修复它,然后重新安装原始问题中链接的32位二进制OpenSSL,也是在默认路径(C:/OpenSSL-Win32)中。这使得在 C:/OpenSSL-Win32/lib 文件夹中,有一个新的 MinGW 文件夹,然后我将其包含在链接器搜索目录中。
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 为什么当我在 C 程序中链接静态库时会"undefined symbol"?
- 强制链接静态库与 cmake 不起作用
- CMake 项目链接静态库
- 使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL
- DLL 链接静态库 - 未使用函数中未解析的链接器符号
- 如何使用 WAF 链接静态库?
- 无法在 Mac OS X 上链接静态资源库
- MAPI 链接静态库 (LNK2019: 未解析的外部符号)
- 为什么G 不链接静态程序
- 节点本机模块 - 链接静态库
- 在链接链接静态(GSOAP)库的共享库时,为什么会得到一个未定义的符号
- 链接静态和动态库时违反 ODR
- 代码中的MinGW::块不链接静态OpenSSL库
- Emscripten 链接静态库错误:wasm 流式编译失败:导入'env.getTempRet0'
- 如何正确链接静态类
- CMake 链接静态库和 glib 错误
- Eclipse CDT:如何在没有项目清理>>项目重建的情况下重新链接静态库
- 错误:链接静态库时出现";"
- gcc 如何链接静态库