在看一个开源工程, 里面用到了curl和openssl, 但是工程使用vcpkg来管理的包, 用CMake来编译
依赖太多了, win10 + 编译选项为 vs2019 x64/Win32(或者Ninja)都编译不过 应该是作者给的编译脚本有问题.
openssl我前面实验都编译好了.
现在就差一个curl. 看了curl的编译依赖项(看了几个依赖项的说明, 依赖项本身还有依赖项…), 挺吓人的.
尝试看看用curl官方编译好的curl(dll, lib)看看能用不?
下载官方编译好的curl, 建立了一个vs2019控制台工程, 设置好curl库和头的位置.
将官方demo(D:\my_dev_depend\curl-8.6.0_1-win64-mingw\docs\examples*.c)贴到工程中试试.
试了2个, 都出现了报错, 错误码为 CURLE_PEER_FAILED_VERIFICATION
查了一下, 好像要设置不校验相关选项才行.
咋设置和这个错误码相关的选项呢? 在头文件中猜读/实验了几次, 搞定了.
现在就可以直接用官方编译好的curl, 不用去自己折腾编译工程了. 开源工程依赖多的时候, 自己编译真不好搞定.
这些作者为啥不将依赖项都编译好(或者告诉使用者, 这些依赖项是否有官方编译好的版本), 放在工程目录中, 让使用者直接关心工程本身, 这样会友好很多.
建立的工程为 vs2019 console x64 debug
下载的官方编译的包为 curl-8.6.0_1-win64-mingw.zip
/*! \file curl_v8d6d0_prj_template.cpp
*/
#include
// 将工程调试的目录设置为 D:\my_dev_depend\curl-8.6.0_1-win64-mingw\bin
// 将工程的库目录设置为 D:\my_dev_depend\curl-8.6.0_1-win64-mingw\lib
#pragma comment(lib, "libcurl.dll.a")
/*
* GET a range only of a HTTP resource
*
*/
// 将工程的头目录设置为 D:\my_dev_depend\curl-8.6.0_1-win64-mingw\include
#include
int main(void)
{
CURL* curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); // disable verify for CURLOPT_SSL_VERIFYPEER
res = curl_easy_perform(curl); // CURLE_PEER_FAILED_VERIFICATION
if (CURLE_OK == res) {
char* ct;
/* ask for the content-type */
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
if ((CURLE_OK == res) && ct)
printf("We received Content-Type: %s\n", ct);
}
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}