让 cURL 与 Visual Studios 2017 一起工作

Posted

技术标签:

【中文标题】让 cURL 与 Visual Studios 2017 一起工作【英文标题】:Getting cURL to work with Visual Studios 2017 【发布时间】:2018-06-01 09:52:17 【问题描述】:

*编辑:我按照以下步骤在 64 位机器上的 VS 2017 中运行 CURL(原始问题见下文):

首先安装vcpkg:

    使用 gitbash 克隆 vcpkg 到 C:\Program Files 在命令提示符下导航到C:\Program Files\vcpkg 在命令提示符下运行:.\bootstrap-vcpkg.bat 在命令提示符下运行:vcpkg integrate install

然后使用 vcpkg 和 Visual Studios 2017 命令提示符安装 cURL:

    打开VS 2017 Command prompt 并导航到vcpkg 文件夹(vcpkg.exe 所在的位置)

    运行:vcpkg install curl[*]:x64-windows(请注意,下载和运行可能需要大约半小时,如果它看起来像是“卡在”部分,请不要担心)。

    *编辑:之前我的指令说要运行vcpkg install curl:x64-windows,但我在@i7clock 的要求下添加了[*] 以启用sftp 和scp 协议。

    在这一步之后,您应该检查以确保 curl 安装正确。为此,您应该在 VS 2017 中创建一个新项目并尝试包含 #include curl/curl.h,而不添加任何其他包含目录。如果你不能这样做,那么你的 curl 安装出了点问题。您应该删除 curl(甚至可能是 vcpkg 文件夹并进行全新安装),直到您可以包含 curl/curl.h

    *重要提示:这仅在您使用 x64 调试器/在 x64 中编译时有效!如果您无法包含 curl 目录,请检查以确保您的调试设置为正确的 Windows 版本。

您可能还需要禁用 SSL 对等验证:

    在请求前放置代码curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);(见下文)。请注意,这只是必要的,因为我不知道如何获取证书以使用 curl。我有一个关于此问题的尚未答复的 *** 帖子here。

以下是您可能需要执行的一些其他步骤来尝试让事情正常运行,但我最终发现它们不是必需的:

    导航到 vcpkg\packages\curl_x64-windows\lib 以找到 libcurl.lib 文件。 在属性 -> 链接器下的附加库目录中包含 libcurl.lib 的路径 在 Linker -> Input -> Additional Dependencies 下的 Additional Dependencies 中包含 libcurl.lib 将CURL_STATICLIB 放在属性 -> C/C++ -> 预处理器 -> 预处理器定义中

这是我现在工作的代码:

#include "curl/curl.h"


void testCurl() 
    CURL *curl;
    CURLcode res; 

    curl_global_init(CURL_GLOBAL_ALL); 

    curl = curl_easy_init();
    if (curl) 
      curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");

    #ifdef SKIP_PEER_VERIFICATION
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
    #endif

    #ifdef SKIP_HOSTNAME_VERIFICATION
        curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
    #endif

    res = curl_easy_perform(curl);

   if (res != CURLE_OK)
       fprintf(stderr, "curl_easy_perform() failed: %s\n",
       curl_easy_strerror(res));

       curl_easy_cleanup(curl);
 
 curl_global_cleanup();


int main()
    testCurl();
    return 0;

*编辑:这是我在修复之前的旧问题的其余解释:

我正在尝试使用 cURL 进行 API 调用,以便开始获取实时股票数据,但在 VS 2017 中运行它时遇到了困难。我尝试使用以下步骤 install using vcpckg:

根据 vcpkg 文档,我现在应该可以简单地 #include ,但找不到文件夹。如果我尝试从 vcpkg\packages\curl_x86\include 和#include 中包含“include”目录,我可以构建我的项目。我也可以访问一些类,但如果我尝试设置 curl_global_init(CURL_GLOBAL_DEFAULT) ,如本例所示,我会收到链接器错误。

【问题讨论】:

那个 cURL 库是针对哪个版本的 Visual C++ 编译的?可能是版本不匹配 我怎么能弄明白呢?虽然我想如果我使用 vcpkg,它会自动选择正确的 cURL 库。 使用 dumpbin,它与 VS 捆绑在一起:dumpbin /rawdata:1 "c:\my_curl_lib.lib"。执行该命令后,查看RAW DATA #1中_MSC_VER 的值 hmm,当我尝试使用 dumpbin 命令时,我在命令提示符下得到一个文本流,然后是 .data、.rdata.、.reloc、.rsrc 和 .text 的摘要。不确定 _MSC_VER 应该在哪里。 好的,所以我想出了如何输出到文件并在 libcurl.lib 上运行 dumpbin。原始数据 #1 上没有 _MSC_VER。 【参考方案1】:

您已经使用 vcpkg 安装了 x86 版本的 curl(即 vcpkg\packages\curl_x86\include 中的 x86)。您需要安装 x64 版本以匹配您的项目:

>vcpkg install curl:x64-windows

【讨论】:

是的,这行得通!我现在可以编译所有注释掉的代码。我会更新我的指令。现在的问题是我得到的是“无法验证证书错误”,但我用 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); 行覆盖了它。 将 verifypeer 设置为 false 意味着您信任任何证书,甚至是自签名证书。这基本上将安全性降低到 0。 您对如何修复@RustyX 有什么建议吗?我在这里为这个问题做了一个堆栈溢出帖子:***.com/questions/47963081/…. 我得到了这个工作谢谢!你知道如何使用 sftp 或 scp 吗?我无法让它们运行......我总是得到“不受支持或禁用的协议” 好的,我知道为什么这不起作用...你能编辑你的答案吗? vcpkg install curl[*]:x64-windows 用于所有协议调用【参考方案2】:

2021 年,在 Windows 10 上,使用当前的 Visual Studio。 vcpkg install curl[*]:x64-windows 不起作用。我收到 BUILD_FAILED 错误。 vcpkg install curl 对我有用,只需要大约 30 秒

【讨论】:

以上是关于让 cURL 与 Visual Studios 2017 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studios Express - 更改调试输出目录

Visual Studios 2015 NuGet Ghostscript 安装错误

Visual Studios 2008 中 C++ 开发中的链接错误

Visual Studios 忽略文件

如何解决 Dlib Visual Studios C++ 错误?

Visual Studios 调试设置保存在哪里?