我正在使用 Visual Studio 2010 并遵循此处的所有步骤。
当我尝试编译我的解决方案时:
// LibCurl.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
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;
}
...我不断收到这些错误:
1>------ Build started: Project: LibCurl, Configuration: Debug Win32 ------
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_perform referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function _main
1>LibCurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_init referenced in function _main
1>C:\Users\Kyle\Documents\Visual Studio 2010\libcurl\VisualStudio\LibCurl\Debug\LibCurl.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我做错了什么?
我一直在使用 libcurl 的静态版本,为了正确链接我的程序,我必须添加定义:
CURL_STATICLIB
构建我的项目的配置。
除了定义
CURL_STATICLIB
之外,对我来说还需要链接以下依赖项(包括libcurl.lib
或libcurld.lib
):
Ws2_32.lib
Wldap32.lib
我遇到了类似的问题 - 发现我正在引用 libcurl.lib 的 64 位位置。将链接目录更改为 32 位位置,项目完美编译。
这对我在 VS2017 - x86 发布/调试 - MFC 静态库上有用
打开项目属性并查看以下内容
C/C++ - 预处理器 - 预处理器定义 - 添加 CURL_STATICLIB
链接器 - 输入 - 附加依赖项 - 添加 (CTRL+C)
ws2_32.lib
Normaliz.lib
Crypt32.lib
Wldap32.lib
libcurl_a.lib(libcurl_a_debug.lib 用于调试配置)
看起来库没有成功链接。确保库目录设置为包含 libcurl dll 的完整路径。还要确保这个库实际上已添加到您的项目中。
经过许多想法和配置,我解决了添加以下内容的问题:
#pragma comment(lib, "lib/libcurl_a.lib")
其中
libcurl_a.lib
是curl lib文件的名称,lib
是包含它的文件夹。
我遇到了同样的错误,我遇到的问题是我根据thisSO答案构建了cURL,如果您希望 /MT 作为运行时库选项,则该答案不起作用。
为了针对 /MT 和 /MTD 构建 cURL,您还必须在同一控制台中使用
Set RTLIBCFG=static
命令实际构建之前执行 nmake
。以这种方式构建 cURL 的完整过程可以在here找到。
编辑: 如果 URL 停止工作,我也会将说明放在这里: