我试图在使用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”添加到项目“属性->链接器->输入->其他依赖项”列表中。这将导致“无法打开文件'libcurl.lib'”。
在尝试了“ packages \ curl.7.30.0.2”文件夹中的“ libcurl.lib”文件的大约一半之后,我终于找到了一个已编译的文件。我在项目“属性->链接器->常规->附加库目录”中添加了“ $(SolutionDir)\ packages \ curl.7.30.0.2 \ build \ native \ lib \ v110 \ Win32 \ $(Configuration)\ dynamic”领域。
现在的问题是,运行它时,“找不到LIBCURL.dll”。这使我意识到,我以前喜欢动态版本的.lib文件。这不是我想要的。我想静态链接库,而不要麻烦DLL。
这是在实际应用程序中尝试运行之前的示例代码:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <curl/curl.h>
int main()
{
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;
}
我详细研究了每个相关问题,如果我需要的答案在其中,则看不到:
CURL Nuget visual studio 2013无法解析的外部符号__imp__curl_easy_init在函数_main()中引用
这是我第一次将Nuget与C ++项目一起使用,因此很可能我根本不了解简单的东西。
如何在C ++应用程序中使用curl Nuget包
由于您使用的是curl
软件包,因此您会注意到Visual Studio只有两个lib版本:v100和v110:
该curl
程序包只能在Visual Studio V100和V110上正常工作。我curl
在Visual Studio 2010和2012上使用该包测试了您的示例代码,效果很好。
因此,此软件包与VS 2015和VS 2017不兼容(VS 2017使用工具集v141,并且该软件包仅支持v110和v120)。如果要在Visual Studio 2015和2017上使用此程序包,可以将工具集更改为上一个。转到项目属性->常规->平台工具集,然后将其更改为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
包装并不完美,所以在使用时我们应该多加注意,以使其变得更加完美。
希望以上信息对您有所帮助,如果您对此解决方案有任何疑问,请告诉我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句