让cURL与2017年Visual Studio合作

时间:2017-12-19 01:42:59

标签: c++ curl linker visual-studio-2017 vcpkg

*编辑:我按照这些步骤在64位计算机上使用CURL工作(请参阅下面的原始问题):

首先安装vcpkg:

  1. 使用gitbash克隆vcpkgC:\Program Files
  2. 在命令提示符中,导航至C:\Program Files\vcpkg
  3. 在命令提示符下运行:.\bootstrap-vcpkg.bat
  4. 在命令提示符下运行:vcpkg integrate install
  5. 然后使用vcpkg和Visual Studios 2017命令提示符安装cURL:

    1. 打开VS 2017 Command prompt并导航到vcpkg文件夹(vcpkg.exe所在的位置)
    2. 运行:vcpkg install curl[*]:x64-windows(请注意,这可能需要大约半小时的时间才能下载并运行,如果它看起来像是"卡在"部件上,请不要担心)

      *编辑:之前我的说明是运行vcpkg install curl:x64-windows,但我在@ {7}}的@ {{@}时间点添加[*]以启用sftp和scp协议。

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

      *重要提示:这只适用于在x64中使用x64调试器/编译的情况!如果您不能包含curl目录检查以确保您的调试设置为正确版本的Windows。

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

      1. 在请求之前放置代码curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);(见下文)。请注意,这只是必要的,因为我无法弄清楚如何获得使用curl的证书。关于此问题here,我有一篇尚未答复的stackoverflow帖子。
      2. 以下是您可能需要尝试运行的其他一些步骤,但我最终发现它们没有必要:

        1. 导航到vcpkg \ packages \ curl_x64-windows \ lib以查找libcurl.lib文件。
        2. 在属性 - >下的附加库目录中包含libcurl.lib的路径。接头
        3. 在链接器下的附加依赖项中包含libcurl.lib - >输入 - >附加依赖
        4. CURL_STATICLIB放置在属性中 - > C / C ++ - >预处理器 - >预处理器定义
        5. 这是我现在正在使用的代码:

          #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,但它无法找到该文件夹​​。如果我尝试包括" include"来自vcpkg \ packages \ curl_x86 \ include和#include的目录我可以构建我的项目。我也可以访问一些类,但如果我尝试设置curl_global_init(CURL_GLOBAL_DEFAULT),就像在这个例子中我得到链接器错误。

          Linker error curl_global_init error

1 个答案:

答案 0 :(得分:6)

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

>vcpkg install curl:x64-windows