VS2013 VC++ libcurl LNK2028 LNK2019 链接错误

VS2013 VC++ libcurl LNK2028 LNK2019 linking errors

我正在尝试让 Libcurl 在我的 VC++ VS2013 社区项目中工作。我已经为此苦苦挣扎了好几个小时,而且我基本上已经尝试了 Stack 上的所有内容和 Google,但无济于事。

我最近的尝试是由 this answer, that mentions libcurl as a Nuget package. This is good, because it comes with all of the .lib files required. I have however run into the same problem as this fellow 引发的,因为我遇到了 linker 错误。

我在链接器 -> 输入下的项目配置设置中将以下库作为 'Additional Dependencies' 导入:

libcurl.lib;libeay32.lib;ssleay32.lib;Ws2_32.lib;libssh2.lib;zlib.lib;wldap32.lib;

显然,这些 .lib 文件中的每一个都位于项目文件夹内 nuget 包文件夹内的不同目录中,因此在 Linker -> General 下,我的 'Additional Library Directories' 设置为:

"PATHTOPROJECT\packages\curl.7.30.0.2\build\native\lib\v110\x64\Release\static";
"PATHTOPROJECT\packages\zlib.1.2.8.1\build\native\lib\v110\Win32\Release\static\cdecl";
"PATHTOPROJECT\packages\openssl.1.0.1.21\build\native\lib\v110\x64\Release\static\cdecl";
"PATHTOPROJECT\packages\libssh2.1.4.3.1\build\native\lib\v110\x64\Release\static\cdecl";

我正在尝试使用静态库,因为如果可以避免,我不想将 .dll 与我的项目可执行文件一起拖动。还值得注意的是,我最近尝试使用 libcurl 还包括 SSL 和诸如此类的东西,但我实际上并不需要这些额外功能。真的,我只需要一个静态 libcurl 库,但我似乎找不到或编译一个。

在我的代码中,我还使用了这个包括:#include "curl/curl.h"

我还在 C/C++ -> 常规下的 'Additional Include Directories' 下正确添加了附加包含目录:

PROJECTPATH\packages\curl.7.30.0.2\build\native\include

现在,只要我不尝试并且 在项目代码中使用 curl,这一切都可以正常编译。

所以,当我尝试在代码中使用 curl 时出现的错误:

CURL *curl;
curl = curl_easy_init();

那段代码产生了这些错误:

1>Main.obj : error LNK2028: unresolved token (0A000453) "extern "C" void * __cdecl curl_easy_init(void)" (?curl_easy_init@@$$J0YAPAXXZ) referenced in function "private: class System::String ^ __clrcall Project::Main::CurlRequest(class System::String ^,class System::String ^,class System::String ^,class System::String ^)" (?CurlRequest@Main@Project@@$$FA$AAMP$AAVString@System@@P$AAV34@000@Z)
1>Main.obj : error LNK2019: unresolved external symbol "extern "C" void * __cdecl curl_easy_init(void)" (?curl_easy_init@@$$J0YAPAXXZ) referenced in function "private: class System::String ^ __clrcall Project::Main::CurlRequest(class System::String ^,class System::String ^,class System::String ^,class System::String ^)" (?CurlRequest@Main@Project@@$$FA$AAMP$AAVString@System@@P$AAV34@000@Z)

我的 curl 使用代码当然还有更多内容,但最低限度显示了 linking 错误的基础知识。我该怎么做才能解决这个问题?正如我之前提到的,我尝试了一系列解决方案,其中一些我将在下面列出:

关于在 VS 项目中使用 libcurl 的问题的许多答案都提到从 http://curl.haxx.se/latest.cgi?curl=win32-devel-msvc 下载 libcurl,但是 link 目前还不起作用,所以我无法使用它。

更多答案说只从源代码编译 libcurl。源代码带有 .vcproj 文件,none 为我编译时没有出现数百个错误,所以就这样了。

已解决。

This Github project 是一个 .bat 文件,它下载 libcurl 源代码,编译它,并制作库(静态和动态)。导入由此创建的静态库 (libcurl_a.lib) 并将其与 include 目录一起用于我的项目。

如果有人可以提供其他有用的步骤来解决我在使用 nuget 包安装时遇到的问题,我将留下一个未被接受的答案。

终于。