【问题标题】:Getting LibCurl to work with Visual Studio 2013让 LibCurl 与 Visual Studio 2013 一起工作
【发布时间】:2013-12-08 21:15:49
【问题描述】:

我无法让 LibCurl 与 Visual Studio 2013 一起使用。我下载了当前版本 (curl-7.33.0) 并尝试按照我在此站点上找到的说明进行操作:Using LibCurl with Visual 2010

但我在下载的文件夹中找不到 curllib.lib。而且我仍然遇到错误:

在互联网上搜索更多帮助后。我现在收到这些错误消息。链接到 libcurl.lib 似乎有问题?

这是我配置的:


在 /lib 我有 libcurl.liblibcurl.dll


更新

我为 Win32 MSVC 下载了这个版本:http://curl.haxx.se/download.html#Win32 添加 libcurl 库并成功编译后,我现在收到此错误消息:

 The application was unable to start correctly (0xc000007b). Click OK to close the application.

这是我尝试运行的示例代码:

#include <iostream>
#include <stdio.h> 
#include <curl/curl.h> 


int main(void)
{
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
        res = curl_easy_perform(curl);

        /* always cleanup */
        curl_easy_cleanup(curl);
    }
    return 0;
}

最终更新

我相信我现在已经让 LibCurl 与 Visual Studio 2013 一起工作。坚持ftw! 虽然,在花了几个小时试图解决这些错误消息之后,我有点犹豫说现在一切正常。这就是为什么我在这个问题上悬赏以获得清晰简洁关于让 LibCurl 与 Visual Studio 2013 一起使用的说明。

这是我为使其工作所做的:

  1. 首先,在这里下载 Win32 MSVC 包:http://curl.haxx.se/download.html#Win32 为了这些说明,假设您下载到 C:\LibCurl

  2. 在 Visual Studio 中启动一个新项目。转到项目|项目属性|VC++ 目录|包括目录| 将路径添加到下载包内的包含目录。 (C:\LibCurl\include)

  3. 接下来,转到项目|项目属性|链接器|常规|附加库目录| 将路径添加到 lib 目录。 (curllib.dll所在的位置)

  4. 然后,转到项目|项目属性|链接器|输入|附加依赖项| 并添加 curllib.lib

  5. 现在,如果您编译一个测试程序,您可能会收到提示 libsasl.dll 丢失的消息。您将需要下载此文件并将其放在与您的构建相同的目录中。 我使用 7-Zip 从 OpenLDAP for Windows 中提取 libsasl.dllOpenLDAP for Windows

这是我上面的测试代码的结果:

【问题讨论】:

  • 我好累。如果有人愿意编辑我的说明以使其清楚,请这样做。我很高兴让 libcurl 工作。
  • 感谢您发布关于如何使用 Visual Studio 2013 的最终结论。:)
  • 讽刺。我什至不再使用 Windows,至少现在不是。
  • 看起来难以置信,但我在第一次安装尝试时就开始工作了!它不会经常发生。
  • 感谢您分享您的解决方案。我在这个地址下载了“libsasl.dll”:“dlldb.com/libsasl-dll”,这样我就不必安装“OpenLDAP for Windows”了。

标签: c++ visual-c++ dll libcurl


【解决方案1】:

这些说明中有很多已经过时,因为他们推荐 win32-ssl-devel-msvc 包用于 curl,不再存在

以下说明允许您使用构建 libcurl:

  • Visual Studio 2013
  • curl 通用源代码压缩包(在 curl 7.44.0 上测试)。

A.构建 libcurl 静态库

  1. http://curl.haxx.se/latest.cgi?curl=tar.gz 下载最新的 curl 通用源代码
  2. 将源解压到本地目录(我们将使用C:\libcurl
  3. 打开命令提示符
  4. "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"初始化你的VC环境变量(根据需要调整你的VS 2013安装目录)
  5. cd C:\libcurl\winbuild
  6. nmake /f Makefile.vc mode=static VC=12
  7. 构建应该出现在C:\libcurl\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl

B.在 Visual Studio 中链接 libcurl

  1. 在 Visual Studio 中,右键单击解决方案资源管理器中的项目,然后单击“属性”
  2. 配置属性 > C/C++ > 常规 > 附加包含目录:添加C:\libcurl\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl\include
  3. 配置属性 > C/C++ > 预处理器 > 预处理器定义:添加CURL_STATICLIB
  4. 配置属性>链接器>常规>附加库目录:添加C:\libcurl\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl\lib
  5. 配置属性>链接器>输入>附加依赖:添加libcurl_a.lib

C.从您的项目中调用 libcurl

以下示例显示了对 libcurl 的调用:

#include "stdafx.h"

#include <curl/curl.h>

void main(int argc, char* argv[])
{
    CURL *curl = curl_easy_init();
    if (curl) printf("curl_easy_init() succeeded!\n"); 
    else fprintf(stderr, "Error calling curl_easy_init().\n");
}

【讨论】:

  • 终于让它在 Visual Studio 2015 上工作了......谢谢你,我真的爱你 :)
  • 这个应该选为最佳答案,这也适用于VS2010
  • @mtlynch,如何为 x64 构建这个?目前这是为 x86 构建的。
  • 要在静态 C 运行时 (CRT) 中链接,在构建 curl 之前在命令行上将环境变量 RTLIBCFG 设置为静态:设置 RTLIBCFG=static
  • @programmer 要为 x64 架构构建它,您需要按照所述打开命令提示符,并在步骤 4 中执行 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64(或等效项)中的 vcvars64.bat。在第 6 步中,您需要指定您的目标是 x64,如下所示:nmake /f Makefile.vc mode=static VC=12 MACHINE=x64。最后,如果您不小心使用错误(32 位)工具为 x64 架构构建,请进入 libcurl 文件夹中的 /builds 文件夹,并删除以 x64 表示的文件夹
【解决方案2】:

我会在评论中这么说,但我缺乏要点。 您不必将任何 .dll 复制到程序运行目录中。 转到项目 |属性 |配置属性并在Envrionment行中写:PATH=$(ExecutablePath)$(LocalDebuggerEnvironment)

从现在开始,您在项目|项目属性|VC++ 目录|二进制文件中提到的任何目录中的所有 .dll 都应该可以在不复制它们的情况下使用。

其余的和你写的完全一样。

【讨论】:

  • 谢谢@michal 我也做了同样的事情,但由于某种原因它不起作用。一定是打错了什么。
【解决方案3】:

我发现最简单的方法是首先确保安装了 nuget。

http://www.nuget.org/

然后创建您的项目。

然后转到http://www.nuget.org/packages/curl/ 并按照说明进入包管理器控制台并输入PM&gt; Install-Package curl

如果您随后在项目目录中查找包目录,您将找到包含文件和库文件。请注意,有一个适用于 Visual Studio 110 的版本,而不是 120,但由于 libcurl 是一个 C 库,您可以将它与 Visual Studio 2013 一起使用。确保在项目属性中的 Visual C++ 目录下指定包含目录和 lib 目录。

确保您有以下文件作为链接器的附加输入 libcurl.lib;libeay32.lib;ssleay32.lib;Ws2_32.lib;libssh2.lib;zlib.lib;wldap32.lib;

【讨论】:

  • 上述包在 VS 2010 上运行良好。它与 VS 2015 不兼容(VS 2015 使用工具集 v140,该包仅支持 v110 和 v120)。对于 VS 2015,请改用 rmt_curl (nuget.org/packages/rmt_curl)
  • 这也应该被标记为正确答案。这是迄今为止最简单的。只是因为 Josh 已经提到了我们 rmt_curl。
  • rmt_curl 在 VS2017 上对我不起作用。我不得不将工具集更改为以前的工具集。在项目属性 | 一般 | Platform Toolset 将其更改为 Visual Studio 2015 (v140) 即可使用
【解决方案4】:

使用 curl/libcurl 的另一种方法是使用 CMake v2.8.12+ 构建(假设您的计算机上已经安装了 git)

打开 cmd 窗口并将目录更改为适当的文件夹

git clone https://github.com/bagder/curl.git
mkdir msbuild
cd msbuild
cmake ..\curl -G"Visual Studio 12 Win64" -DCMAKE_INSTALL_PREFIX=C:\curl.vc12 -DCURL_STATICLIB=ON
< ... lots of output here ... >

在 Visual Studio 中打开生成的 CURL.sln 并构建它。

我在示例中使用的 CMake 选项

-G 选择构建生成器。在我们的例子中是 Visual Studio 2013 64 位目标

-DCMAKE_INSTALL_PREFIX - 提供安装目标的根文件夹

-DCURL_STATICLIB=ON - 为静态库生成构建

构建安装目标后,您将在 C:\curl.vc12 中找到 bin/include/lib 文件夹

为您的解决方案提供这些路径并使用 curl 库构建您的代码。

【讨论】:

  • 仅供参考:您不需要安装 git,您也可以从源代码下载中执行此操作。也有一个 cmake 的 gui,虽然它不会给你带来太多好处:)
【解决方案5】:

我尝试使用 VS2012(我没有 2013)从头开始,并且效果很好。

所以,我不确定你的问题是什么,但是:

  • 确保下载正确的存档。
  • 尝试将 cURL 文件夹放在没有空格的路径上。
  • 如果您认识使用 VS2012 或更早版本的人,请尝试使用相同的 include 和 lib 编写您的代码,看看它是否有效。
  • 粘贴您的代码的最小工作示例,以便我对其进行测试。

【讨论】:

    【解决方案6】:

    这有点晚了,但是对于那些仍然有问题的人,这种方法对我来说效果最好:

    1. 将 VS 添加到系统路径:
      例如:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
    2. http://curl.haxx.se/download.html 下载当前 curl-X.zip 并解压缩。
    3. curl-X/winbuild打开命令行。
    4. 致电vcvars32.bat
    5. 致电nmake /f Makefile.vc mode=static VC=12
    6. 转到curl-X/builds/libcurl-XXX

    在那里你可以找到包含和libcurl_a.lib。 这个库对我来说很好。
    请记住在使用此库编译代码时定义-DCURL_STATICLIB

    【讨论】:

    • 使用 nmake 我可以使用什么选项来构建 x64 库?
    • 你可以使用MACHINE=x64
    • 谢谢!有效。但是只有当我将运行时设置为“带 DLL 的多线程”时,示例 C++ 代码才会编译。我认为静态构建允许我将运行时设置为“多线程 (/MT)”。
    • 是的,这是正确的。看到这个描述,它也有解决方案(参见BUILD.WINDOWS.txt):If you are using mode=static nmake will create and link to the static build of libcurl but *not* the static CRT. If you must you can force nmake to link in the static CRT by passing RTLIBCFG=static. Typically you shouldn't use that option, and nmake will default to the DLL CRT. RTLIBCFG is rarely used and therefore rarely tested.
    【解决方案7】:

    对于 Visual Studio 2017,link 中的步骤对我有用。如果链接过期或专门针对那些下载 libcurl zip 文件而不是从 GitHub 克隆的人,我会在此处记下步骤。

    1. 使用“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat” x64 设置环境变量。如果命令成功,您将看到一条消息,上面写着Environment initialized for 'x64'

    2. download libcurl 下载并提取压缩的 libcurl 文件。我使用了.zip 文件。

    3. cd 进入解压后的 libcurl 文件夹内的 winbuild 目录。
    4. 运行nmake /f Makefile.vc mode=dll MACHINE=x64 进行构建。有关构建选项的更多信息,请参阅 winbuild 文件夹中的 BUILD.WINDOWS 文本文件。
    5. 上一级目录,cd 进入builds 文件夹,找到编译后的文件。

    一切顺利!

    【讨论】:

    • 完美!我可以使用 VS2017 Build Tools 和 VS2017 Community 确认这适用于 curl-7.61.1。
    【解决方案8】:

    问题是 默认 VS2013 平台工具的目标没有在 NuGet 包中设置。这就是为什么它适用于 VS2012 而不是 VS2013。我手动创建了替换目标文件。说明及下载:

    https://github.com/evoskuil/curl-nuget-targets

    【讨论】:

      【解决方案9】:

      下载 curl v7.37.0 源代码并使用提供的 Visual Studio 项目文件。

      过去几周我一直在完善我自己的个人项目文件,这些文件基于原始 VC6 文件,并将它们添加到存储库中。

      .dsw / .dsp (VC6)、.sln / .vcproj(VC7、VC7.1、VC8 和 VC9 以及 .sln / .vcxproj(VC10、VC11 和 VC12)文件均适用于 DLL 和静态库的构建支持 Win32 和 x64 配置中的 OpenSSL 和 Windows SSPI / SChannel。

      【讨论】:

      • 我不确定这是否完全回答了这个问题。这可能应该是一条评论。
      【解决方案10】:

      我找到了一种使用最新包在 VC++ 中工作的简单方法。我基本上遵循了在 Visual Studio 中使用 libcurl 中的步骤。指令中的 libcurl 和 VC++ 已经很老了。

      首先在下载页面https://curl.haxx.se/download.html下载ZIP文件,ZIP包为https://curl.haxx.se/download/curl-7.50.1.zip

      转到项目-> Windows\VC10(或您的VC版本)\lib\libcurl.sln,在VC++中打开项目。

      在 DLL Release 中构建项目。 DLL 调试在我的 VC++ 上不起作用。

      进入build\Win32\VC10\DLL Release,可以找到上一步生成的lib和dll文件。

      新建一个文件夹,包含 include 和 lib 文件夹。将 DLL Release 文件夹中的 libcurb.dll 和 libcurb.lib 复制到 new\lib。将 curl-7.50.1\include 中的所有内容复制到 new\include 文件夹。

      C++ 属性 -> 配置属性 -> VC++ 目录,将 new\include 添加到包含目录,将 new\lib 添加到库目录;将 new\lib 添加到链接器 -> 常规 -> 附加库目录,将 libcurl.lib 添加到链接器 -> 输入 -> 附加依赖项

      看来我得把dll文件和可执行文件放在同一个文件夹下。

      它应该可以工作。

      【讨论】:

        猜你喜欢
        • 2013-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 2015-07-27
        • 1970-01-01
        相关资源
        最近更新 更多