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