Неразрешенные символы при связывании программы с использованием 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;
}

9 ответов

Решение

Похоже, что библиотеки не были успешно связаны. Убедитесь, что в каталоге библиотеки указан полный путь к dll libcurl. Также убедитесь, что эта библиотека действительно добавлена ​​в ваш проект.

Я использую статическую версию libcurl, и чтобы правильно связать свою программу, мне нужно было добавить определение:

CURL_STATICLIB

построить конфигурацию моего проекта.

Помимо определения CURL_STATICLIB, для меня также было необходимо связать следующие зависимости (в том числе libcurl.lib или же libcurld.lib):

  • Ws2_32.lib
  • Wldap32.lib

Я столкнулся с подобной проблемой - обнаружил, что я ссылаюсь на 64-битное расположение libcurl.lib. Поменял каталог ссылок на 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 для настройки отладки)

  • C/C++ - Общие - Дополнительные каталоги включения - Добавить папку включения в файлы заголовков

У меня такая же проблема. Я написал, как я наконец смог сделать CurlLib работ, здесь: http://quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/ если вы хотите посмотреть. Удачи!

После многих идей и конфигураций я решил проблему, добавив следующее:

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

где libcurl_a.lib это имя файла библиотеки curl и lib это папка, в которой он находится

У меня была такая же ошибка, проблема заключалась в том, что я построил cURL в соответствии с этим ответом SO, который не работает, если вы хотите / MT в качестве параметра библиотеки времени выполнения.

Чтобы построить cURL относительно / MT и / MTD, вы также должны выполнить Set RTLIBCFG=static перед тем, как построить его с помощью nmakeв той же консоли. Полный процесс создания cURL таким образом можно найти здесь .

У меня была такая же ошибка. Проблема заключалась в том, что я собирал libcurl_a.lib в 32-битной версии, а мой проект был в 64-битной версии. Вам придется использовать 64-битную командную строку разработчика вместо 32-битной. Поэтому вместо того, чтобы открывать его через «VS->Инструменты->Командная строка разработчика», вам придется использовать ярлык «Командная строка x64 Native Tools для VS 2022» из меню «Пуск» Windows. См. https://learn.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line?view=msvc-170 .

Другие вопросы по тегам