VSCode+MinGW64环境下C++调用预编译OpenSSL出现链接错误求助
解决OpenSSL链接错误(MinGW64 + VS Code)
问题场景
已正确配置OpenSSL头文件路径,但编译C++代码时触发链接错误:
C:/Users/felix/my_future/PMS_Blockchain_CPP/pms_blockchain/src/Wallet.cpp:77: undefined reference to `EVP_PKEY_CTX_new_id' collect2.exe: error: ld returned 1 exit status
使用环境为VS Code + MinGW64,当前tasks.json配置如下:
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:\\msys64\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${workspaceFolder}\\pms_blockchain\\src\\**.cpp", "${workspaceFolder}\\openssl\\**.h", "-o", "${workspaceFolder}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ], "version": "2.0.0" }
修复步骤
链接错误是因为编译时未关联OpenSSL的库文件,需修改tasks.json的编译参数:
- 移除无效参数:删除
${workspaceFolder}\\openssl\\**.h,头文件无需作为编译输入,编译器会通过配置的头文件路径自动查找。 - 添加库链接参数:在
args数组中加入OpenSSL核心库的链接指令,若库文件不在系统默认路径,需先通过-L指定库目录。
修改后的tasks.json
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:\\msys64\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", "${workspaceFolder}\\pms_blockchain\\src\\**.cpp", // 若OpenSSL库不在系统默认路径,取消下面一行注释并替换为实际库目录 // "-L${workspaceFolder}\\openssl\\lib", "-lssl", "-lcrypto", "-o", "${workspaceFolder}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ], "version": "2.0.0" }
参数说明
-L<路径>:指定编译器查找库文件的目录,需替换为你的OpenSSLlib文件夹实际路径(若库已在系统环境变量路径中可省略)。-lssl:链接OpenSSL的SSL库。-lcrypto:链接OpenSSL的加密算法库。
内容的提问来源于stack exchange,提问作者Felix Jost
相关产品推荐
相关产品推荐

