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

问题描述 投票:0回答:7

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

我做错了什么?

c visual-studio curl unresolved-external
7个回答
111
投票

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

CURL_STATICLIB

构建我的项目的配置。


26
投票

除了定义

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

  • Ws2_32.lib
  • Wldap32.lib

6
投票

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


6
投票

这对我在 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 用于调试配置)

  • C/C++ - 常规 - 附加包含目录 - 添加包含 文件夹到头文件

4
投票

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


2
投票

经过许多想法和配置,我解决了添加以下内容的问题:

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

其中

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


1
投票

我遇到了同样的错误,我遇到的问题是我根据thisSO答案构建了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 文件夹。
© www.soinside.com 2019 - 2024. All rights reserved.