提问人:Kyle 提问时间:11/14/2010 最后编辑:Gilles 'SO- stop being evil'Kyle 更新时间:6/14/2023 访问量:60090
使用 libcurl 链接程序时未解析的符号
Unresolved symbols when linking a program using libcurl
问:
我知道这是编程问题,但我只是很沮丧地试图弄清楚我做错了什么。
我正在使用 Visual Studio 2010 并按照此处的所有步骤操作: http://curl.haxx.se/libcurl/c/visual_studio.pdf
当我尝试编译我的解决方案时,我不断收到此错误:
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.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;
}
答:
看起来库没有成功链接。确保库目录设置为包含 libcurl dll 的完整路径。此外,请确保此库已实际添加到您的项目中。
评论
我一直在使用 libcurl 的静态版本,为了正确地将我的程序链接到它,我必须添加定义:
CURL_STATICLIB
构建我的项目的配置。
评论
我有同样的问题。我在这里写了我如何最终能够使 CurlLib 工作: http://quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/ 如果你想看看。祝你好运!
我遇到了类似的问题 - 发现我引用了 libcurl.lib 的 64 位位置。将链接目录更改为 32 位位置,并且项目编译完美。
除了定义,对我来说,还需要链接以下依赖项(包括或):CURL_STATICLIB
libcurl.lib
libcurld.lib
Ws2_32.lib
Wldap32.lib
评论
CURL_STATICLIB
经过许多想法和配置,我解决了这个问题,添加了以下内容:
#pragma comment(lib, "lib/libcurl_a.lib")
其中 是 curl lib 文件的名称,是包含该文件的文件夹。libcurl_a.lib
lib
评论
我有同样的错误,我遇到的问题是我根据这个 SO 答案构建了 cURL,如果您希望 /MT 作为运行时库选项,这不起作用。
为了构建相对于 /MT 和 /MTD 的 cURL,您还必须在同一个控制台中使用命令实际构建它之前执行它。以这种方式构建 cURL 的完整过程可以在这里找到。Set RTLIBCFG=static
nmake
编辑: 如果 URL 停止工作,我也会在这里放置说明:
- 将 CUrl 源代码下载并解压缩到临时目录。http://curl.haxx.se/download.html,在本教程中,我们将使用 curl-7.37.0
- 打开“Visual Studio 命令提示符 (2010)”
- 浏览到 Winbuilds 文件夹。\curl-7.37.0\winbuild。
- 在命令提示符下键入并按回车键。这会将编译器设置为针对 /MT 和 /MTd 进行生成。
Set RTLIBCFG=static
- 键入以生成调试版本或
nmake /f MakeFile.vc mode=static DEBUG=yes
- 键入以生成发布版本。
nmake /f MakeFile.vc mode=static DEBUG=no
评论
这在 VS2017 - x86 发布/调试 - MFC 静态库上对我有用
打开项目属性并查看以下内容
C/C++ - 预处理器 - 预处理器定义 - 添加CURL_STATICLIB
链接器 - 输入 - 其他依赖项 - 添加 (CTRL+C)
ws2_32.lib
规范化.lib
Crypt32.库
Wldap32.lib
libcurl_a.lib(libcurl_a_debug.lib 用于调试配置)
- C/C++ - 常规 - 附加包含目录 - 添加包含 文件夹到头文件
我有同样的错误。 问题是我用 32 位构建 libcurl_a.lib,而我的项目是 64 位。 必须使用 64 位托管开发人员命令提示符,而不是 32 位提示符。 因此,您必须使用 Windows 开始菜单中的快捷方式“适用于 VS 2022 的 x64 Native Tools Command Prompt”,而不是通过“VS->Tools->Developer Command Prompt”打开它。 查看 https://learn.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line?view=msvc-170
评论
libcurl.lib