我正在尝试在使用Visual Studio 2017开发的C ++应用程序中使用curl。我喜欢使用Nuget的想法,因为它是一种非常干净的实现库的方式。我试图从Microsoft论坛中按照下面的示例,这导致我使用“rmt_curl”包(链接如下)。然而,这让VS无法找到“curl.h”。
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)\ packages \ 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
这是我第一次将Nuget与C ++项目一起使用,所以我很可能根本不理解一些简单的东西。
答案 0 :(得分:5)
如何在C ++应用程序中使用curl Nuget包
由于您使用的是curl
软件包,您会注意到Visual Studio只有两个lib版本: v100 &的 V110 强>:
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
:
所以只需使用#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
包不是完美的,所以我们在使用它时应该多加注意,这样它就会变得更加完美。
希望以上信息对您有所帮助,如果您对此解决方案有任何疑问,请告知我们。