Windows 10系统命令行Curl正常但C++调用Curl库编译失败如何解决
问题原因
报错是因为g编译器没有获取到vcpkg安装的curl头文件、库文件的搜索路径。VS Code能识别curl库是因为编辑器层面配置了对应路径,不代表编译时会自动把路径传递给g。
解决步骤
先确认vcpkg的安装根目录,以及你安装curl时选择的架构,x64环境默认安装路径为
vcpkg根目录/installed/x64-windows,头文件存放在该路径下的include文件夹,库文件存放在lib文件夹。手动编译时需要给g++传递三类参数:
- 头文件搜索路径参数:格式为
-I"头文件路径" - 库文件搜索路径参数:格式为
-L"库文件路径" - 链接库参数:
-lcurl
完整编译命令示例(替换路径为你本地实际路径即可):
g++ CurlExample.cpp -I"C:/vcpkg/installed/x64-windows/include" -L"C:/vcpkg/installed/x64-windows/lib" -lcurl -o CurlExample.exe如果执行上述命令出现链接依赖错误,可补充curl依赖的系统库参数:
g++ CurlExample.cpp -I"C:/vcpkg/installed/x64-windows/include" -L"C:/vcpkg/installed/x64-windows/lib" -lcurl -lssl -lcrypto -lz -lwldap32 -lws2_32 -o CurlExample.exe- 头文件搜索路径参数:格式为
若要在VS Code中一键编译,可修改
.vscode/tasks.json文件,把上述参数写入g++的编译参数中,参考配置:{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "g++", "args": [ "${file}", "-I\"C:/vcpkg/installed/x64-windows/include\"", "-L\"C:/vcpkg/installed/x64-windows/lib\"", "-lcurl", "-lssl", "-lcrypto", "-lz", "-lwldap32", "-lws2_32", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true } } ] }
注意事项
- 如果你安装的是x86版本的curl,需要把路径中的
x64-windows替换为x86-windows,且架构要和你使用的g++版本保持一致 - 运行生成的exe前,需要确保curl对应的dll文件放在exe同目录,或者已添加到系统PATH环境变量,否则会出现运行时找不到dll的错误
内容的提问来源于stack exchange,提问作者KaleTEvans
相关产品推荐
相关产品推荐

