37

我知道这是编程问题,但我只是想弄清楚我做错了什么感到沮丧..

我正在使用 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;
}
4

8 回答 8

103

我一直在使用静态版本的 libcurl,为了正确链接我的程序,我必须添加定义:

CURL_STATICLIB

构建我的项目的配置。

于 2011-03-23T20:56:51.947 回答
24

除了定义之外CURL_STATICLIB,对我来说,还需要链接以下依赖项(包括libcurl.libor libcurld.lib):

  • Ws2_32.lib
  • Wldap32.lib
于 2016-01-24T17:14:09.077 回答
5

我遇到了类似的问题 - 发现我引用了 libcurl.lib 的 64 位位置。将链接目录更改为 32 位位置,项目编译完美。

于 2014-12-19T22:36:27.843 回答
4

看起来图书馆没有成功链接。确保库目录设置为包含 libcurl dll 的完整路径。还要确保这个库实际添加到您的项目中。

于 2010-11-14T07:04:22.737 回答
4

我有同样的问题。我写了我最终如何使CurlLib工作,在这里:http: //quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/如果你想看看。祝你好运!

于 2012-04-09T09:58:01.770 回答
1

经过许多想法和配置,我解决了添加这个问题:

#pragma comment(lib, "lib/libcurl_a.lib")

其中libcurl_a.lib是 curl lib 文件的名称,并且lib是包含它的文件夹。

于 2017-06-16T12:27:21.783 回答
1

我遇到了同样的错误,我遇到的问题是我根据这个SO 答案构建了 cURL,如果您希望 /MT 作为运行时库选项,这将不起作用。

为了针对 /MT 和 /MTD 构建 cURL,您还必须在使用同一控制台中Set RTLIBCFG=static的命令实际构建它之前执行它。nmake可以在这里找到以这种方式构建 cURL 的完整过程。

编辑:如果 URL 停止工作,我也会将说明放在这里:

  • 下载 CUrl 源代码并将其解压缩到临时目录。http://curl.haxx.se/download.html,在本教程中,我们将使用 curl-7.37.0
  • 打开“Visual Studio 命令提示符 (2010)”</li>
  • 浏览到 Winbuilds 文件夹。\curl-7.37.0\winbuild.
  • 输入Set RTLIBCFG=static命令提示符并按回车键。这将设置编译器为 /MT 和 /MTd 构建。
  • 键入nmake /f MakeFile.vc mode=static DEBUG=yes以构建调试版本或
  • 键入nmake /f MakeFile.vc mode=static DEBUG=no以构建发布版本。
于 2021-02-26T10:21:01.457 回答
0

这在 VS2017 - x86 Release/Debug - MFC Static Library 上对我有用

打开项目属性并查看以下内容

  • C/C++ - 预处理器 - 预处理器定义 - 添加 CURL_STATICLIB

  • 链接器 - 输入 - 附加依赖项 - 添加 (CTRL+C)

ws2_32.lib

规范化库

Crypt32.lib

Wldap32.lib

libcurl_a.lib(用于调试配置的 libcurl_a_debug.lib)

  • C/C++ - 常规 - 附加包含目录 - 将包含文件夹添加到头文件
于 2022-01-03T23:12:56.117 回答