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

person Kyle    schedule 14.11.2010    source источник
comment
убедитесь, что вы выполнили шаги 4.3.2 и 4.3.3 из связанного PDF-файла. Вы получаете ошибку компоновщика, что означает, что он не связывается с файлом libcurl.lib.   -  person Jesse Beder    schedule 14.11.2010
comment
Спасибо, Джесси. Я буду повторять шаги медленнее и посмотрю, почему это не связано. Спасибо за помощь!   -  person Kyle    schedule 14.11.2010


Ответы (7)


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

person Willi Ballenthin    schedule 14.11.2010
comment
Вам нужно включить libcurl.lib, curllib.lib - person PTT; 03.12.2012

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

CURL_STATICLIB

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

person stoiczek    schedule 23.03.2011
comment
Вероятно, это одна из распространенных проблем: если вы используете libcurl в качестве библиотеки STATIC, вам необходимо определить CURL_STATICLIB не только в проекте curl, но и в проекте, в котором вы хотите его использовать. - person PeterK; 29.10.2012
comment
Еще один интересный момент, который я только что встретил: вы можете определить его в основном проекте и забыть упомянуть в другом используемом vcproj. - person Dmitry Kochkin; 11.02.2013
comment
Спасибо огромное. перейти в настройки проекта vc ++ | c ++ | препроцессор и добавьте CURL_STATICLIB в определения препроцессора, и он работает - person Silver Moon; 22.02.2015
comment
Вы только что сэкономили мне кучу работы и кучу волос, которую я бы иначе вырвал - person Rick; 04.06.2015
comment
Только на MSVC? - person triclosan; 17.07.2015
comment
ты тоже спас мои волосы - person Hans; 08.01.2016

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

  • Ws2_32.lib
  • Wldap32.lib
person cdonts    schedule 24.01.2016
comment
Определение CURL_STATICLIB спасло мой бекон! Спасибо! - person T4cC0re; 30.05.2017
comment
У меня было еще несколько отсутствующих зависимостей, этот ответ помог мне stackoverflow.com/questions/50477484/ - person Stan; 16.10.2020

Я столкнулся с аналогичной проблемой - обнаружил, что ссылаюсь на 64-битное расположение libcurl.lib. Изменил каталог ссылок на 32-битное место, и проект скомпилировался отлично.

person wayne    schedule 19.12.2014

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

person tagoma    schedule 09.04.2012

После множества идей и настроек я решил проблему, добавив следующее:

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

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

person Zsolti    schedule 16.06.2017
comment
Спасибо. Это сработало для меня! Добавил в один из заголовочных файлов. CURL_STATICLIB в этом случае не понадобился, кстати, я использую свою самокомпилированную версию curl 7.70.0 с: curl-7.70.0 \ winbuild ›nmake / f Makefile.vc mode = dll. В этом случае используйте: #pragma comment (lib, lib / libcurl.lib) - person Eddz; 20.05.2020

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

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

Изменить: если 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, чтобы собрать версии выпуска.
person Rumák    schedule 26.02.2021