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

本杰明·坎宁安

我试图在使用Visual Studio 2017开发的C ++应用程序中使用curl。我喜欢使用Nuget的想法,因为它是实现库的非常干净的方法。我尝试遵循Microsoft论坛中的以下示例,该示例导致我使用“ rmt_curl”包(在下面链接)。但是,这使VS无法找到“ curl.h”。

https://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/a5cf5caa-450e-425b-af5b-84f8e1c198f9/c-visual-studio-2015-how-to-include-nuget-package-in-我的项目?论坛= vcgeneral

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)\ p​​ackages \ 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的cURL

CURL Nuget visual studio 2013无法解析的外部符号__imp__curl_easy_init在函数_main()中引用

添加curl库C ++

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

刘o

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

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

在此处输入图片说明

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在VS代码的node.js应用程序中使用python包时导入python包

如何在另一个Flutter应用程序中使用本地Flutter包?

如何在Azure函数中使用NuGet包?

如何在角度应用程序中使用@graphy npm软件包?

如何在ASP.NET vNext中使用nuget包?

如何从AppVeyor发布beta nuget程序包

如何在PowerShell脚本中使用NuGet软件包?

如何使用Visual Studio 2017创建Nuget程序包

如何在Cake Build工具中使用Nuget软件包

如何在Xamarin Forms应用程序中将nuget软件包从旧项目安装到新项目?

如何继承NuGet包中的引用程序集

无法在C#Azure函数中使用Nuget程序包

如何在Visual Studio解决方案的部署中使用nuget包

如何使用nuget.core将nuget包添加到c#项目文件

如何使用新的csproj方法在nuget包中分发字体来创建nuget包?

如何检查我的C#应用程序是否正在使用nuget包中正确的平台特定的dll?

如何确保闪亮应用程序的用户在R中使用正确的软件包版本

如何使用MSBuildWorkspace获取引用的nuget包?

如何在Visual Studio项目中更改NuGet程序包引用以使用Nuget.config

如何在R Shiny应用程序中使用{gtsummary}软件包

如何在Windows Runtime中使用多语言应用程序工具包?

如何在Node.js应用程序中使用sql-injection包?

如何使用EntityFramework CodeFirstStoreFunctions nuget包?

如何在 python 应用程序中使用 Visual Studio 2017 中的用户包

如何在 WPF/XAML 中使用 Nuget 包中的图标?

如何在 Choregraphe 的应用程序中导入模块(在其中使用相对较大的包)?

如何在 Visual Studio 中使用 OpenCV Nuget 包发布我的 C# 项目?

如何在闪亮的应用程序中使用 renv 包以避免在闪亮的服务器上安装新包?

“建議使用 nuget 包中的類型” - 如何建議我的 NuGet 包?