如何在C ++应用程序中使用curl Nuget包

时间:2017-08-17 16:40:50

标签: c++ visual-studio curl nuget

我正在尝试在使用V​​isual Studio 2017开发的C ++应用程序中使用curl。我喜欢使用Nuget的想法,因为它是一种非常干净的实现库的方式。我试图从Microsoft论坛中按照下面的示例,这导致我使用“rmt_curl”包(链接如下)。然而,这让VS无法找到“curl.h”。

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a5cf5caa-450e-425b-af5b-84f8e1c198f9/c-visual-studio-2015-how-to-include-nuget-package-in-my-project?forum=vcgeneral

rmt_curl nuget包: https://www.nuget.org/packages/rmt_curl/

所以我切换到使用“curl”包修复了头文件,但是为每个curl函数导致了“未解析的外部符号”。

curl nuget包: https://www.nuget.org/packages/curl/

受其他评论和答案的启发,我将“libcurl.lib”添加到项目“Properties-> Linker-> Input-> Additional Dependencies”列表中。这导致“无法打开文件'libcurl.lib'”。

在“packages \ curl.7.30.0.2”文件夹中尝试了大约一半“libcurl.lib文件后,我终于找到了一个编译过的文件。我将“$(SolutionDir)\ p​​ackages \ curl.7.30.0.2 \ build \ native \ lib \ v110 \ Win32 \ $(Configuration)\ dynamic”添加到项目“Properties-> Linker-> General-> Additional图书馆目录“字段。

现在的问题是,在运行它时,“找不到LIBCURL.dll”。这让我意识到早些时候我喜欢反对.lib文件的动态版本。这不是我想要的。我想静态链接库而不是打扰DLL。

以下是我在实际应用程序中尝试此操作之前尝试运行的示例代码:

QMAKE_LFLAGS_WINDOWS += /LARGEADDRESSAWARE

我详细查看了这些相关问题,如果我需要的答案就在那里,我看不到:

unresolved external symbol using curl NuGet

cURL with Visual Studio 2013

CURL Nuget visual studio 2013 unresolved external symbol __imp__curl_easy_init referenced in function _main()

Add curl library C++

这是我第一次将Nuget与C ++项目一起使用,所以我很可能根本不理解一些简单的东西。

1 个答案:

答案 0 :(得分:5)

  

如何在C ++应用程序中使用curl Nuget包

由于您使用的是curl软件包,您会注意到Visual Studio只有两个lib版本: v100 &的 V110

enter image description here

curl包只能在Visual Studio V100和V110上正常工作。我在Visual Studio 2010和2012上使用curl包测试了您的示例代码,并且工作正常。

所以此套餐与VS 2015& VS 2017 (VS 2017使用工具集v141,该软件包仅支持v110和v120)。如果要在Visual Studio 2015和2017上使用此程序包,可以将工具集更改为上一个。进入Project Properties-> General-> Platform Toolset,并将其更改为Visual Studio 2010(v100)。 (您需要安装VS2010或VS 2012 )对其进行测试并确认其正常工作。

如果你不想安装VS2010或VS2012,你可以尝试使用rmt_curl软件包,但是你需要注意一些要点,否则你将无法获得它工作。

对于 VS2015 ,安装软件包rmt_curl后,您会注意到外部依赖项中存在curl.h

enter image description here

所以只需使用#include <curl.h>代替#include <curl/curl.h> 来包含头文件。使用#include <curl.h>后,该项目在我的Visual Studio 2015中运行良好。

对于Visual Studio 2017,rmt_curl不起作用,但您可以将工具集更改为Visual Studio 2015(v140)(您需要安装Microsoft Build Tools 2015或VS 2015)。它对我有用。

希望这一塌糊涂的答案不会打扰你。似乎curl包不是完美的,所以我们在使用它时应该多加注意,这样它就会变得更加完美。

希望以上信息对您有所帮助,如果您对此解决方案有任何疑问,请告知我们。