飞扬的Blog
主页
登录
vs2022配置libcurl
"date"
:
"2020-12-25 10:37:38"
"classfiy"
:
"c++"
"author"
:
"飞扬"
"viewTimes"
:
308
返回
> 参数说明: https://github.com/curl/curl/tree/master/winbuild#readme ##1.编译libcurl 1. 下载libcurl包:https://curl.se/download.html 2. 解压过后运行`%libcurl%`内的`buildconf.bat` 3. 打开VS开发人员命令行工具 4. 进入`%libcurl%`目录下的`winbuild`目录 5. 输入:nmake /f Makefile.vc mode=static VC=17 MACHINE=x86 DEBUG=no ###参数说明: `mode=static`为静态编译可使用`/MD`,如果想用`/MT`就用`mode=dll`。 >但是利用`mode=dll`编译的`/MT`的DLL需要带上`libcurl.dll`才能使用。 如果想用`/MT`并且使用`mode=static`编译,就删除编译好的libcurl然后在命令后面加上:`RTLIBCFG=static`。 如果编译的时候会出现无法解析的外部符号问题,在命令行后面加`ENABLE_IDN=no` `MACHINE=x86/x64`(对应位数要用vs对应的命令行版本) `DEBUG=no/yes` 如果`DEBUG=yes`的话导入lib就是:`libcurl_a_debug.lib`,否则:`libcurl_a.lib` 在libcurl目录下的`builds`会有对应编译好的目录。 ##2.配置vs项目 1. VC++目录 > 包含目录:`%libcurl%`\builds\libcurl-vc15-x86-debug-static-ipv6-sspi-schannel\include 2. C/C++ > 预处理器:新增 `CURL_STATICLIB`,这里如果不做就会提示找不到什么什么的。 3. C/C++ > 代码生成 > 运行库:如果是`DEBUG`:/MDd,`Release`:/MD (这里根据编译时选择的mode设置) 4. 链接器 > 输入 > 附加依赖项: ``` libcurl_a.lib Ws2_32.lib Wldap32.lib winmm.lib Crypt32.lib Normaliz.lib ``` ##3.测试 ```cpp #include <iostream> #include "curl\curl.h" int main() { CURL* curl = 0; CURLcode res; curl = curl_easy_init(); if (curl != 0) { curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com"); //www.baidu.com 可能会跳转,所以设置为跟随跳转 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); //发出请求 res = curl_easy_perform(curl); if (res != CURLE_OK) { //输出可能是乱码,因为没配置UTF-8 fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } //清理工作 curl_easy_cleanup(curl); } std::cout << "Hello World!\n"; system("pause"); } ``` ## 支持nghttp2 > https://github.com/nghttp2/nghttp2 步骤: 1. 下载源代码 2. 用cmake-gui编译 例如编译到'\build'目录里,将\build\Release下的文件复制到一个`新文件夹`的`lib`内,然后复制`\build\lib\includes`目录到那个新文件夹里命名为`include`,再找到`nghttp2.h`放进`include`里。 3. 然后 `nmake /f Makefile.vc mode=static VC=17 MACHINE=x86 DEBUG=no WITH_NGHTTP2=dll NGHTTP2_PATH="{新文件夹}"`