使用libcurl链接程序时未解析的符号

时间:2010-11-14 06:50:57

标签: c visual-studio curl unresolved-external

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

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

7 个答案:

答案 0 :(得分:81)

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

<强> CURL_STATICLIB

构建我的项目配置。

答案 1 :(得分:20)

除了定义CURL_STATICLIB之外,还有必要链接以下依赖项(包括libcurl.liblibcurld.lib):

  • Ws2_32.lib
  • Wldap32.lib

答案 2 :(得分:4)

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

答案 3 :(得分:4)

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

为了构建与 /MT 和 /MTD 相关的 cURL,您还必须先执行 Set RTLIBCFG=static,然后再在同一个控制台中使用 nmake 命令实际构建它。以这种方式构建cURL的完整过程可以在here找到。

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

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

答案 6 :(得分:0)

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

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

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