Nicht aufgelöste Symbole beim Verknüpfen eines Programms mit libcurl

Lesezeit: 4 Minuten

Kyles Benutzeravatar
Kyle

Ich weiß, das sind Programmierfragen, aber ich bin nur frustriert darüber, herauszufinden, was ich falsch mache.

Ich verwende Visual Studio 2010 und habe alle Schritte hier befolgt: http://curl.haxx.se/libcurl/c/visual_studio.pdf

Wenn ich versuche, meine Lösung zu kompilieren, erhalte ich immer diesen Fehler:

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 ==========

Quelle:

// 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;
}

  • Stellen Sie sicher, dass Sie die Schritte 4.3.2 und 4.3.3 aus dem verlinkten PDF ausgeführt haben. Sie erhalten einen Linker-Fehler, was bedeutet, dass die Datei nicht verlinkt wird libcurl.lib.

    – Jesse Beder

    14. November 2010 um 8:43 Uhr

  • Danke Jesse. Ich werde die Schritte langsamer wiederholen und sehen, warum es nicht verknüpft ist. Danke für die Hilfe!

    – Kyle

    14. November 2010 um 9:02 Uhr


Ich habe die statische Version von libcurl verwendet, und um mein Programm richtig damit zu verknüpfen, musste ich eine Definition hinzufügen:

CURL_STATICLIB

um die Konfiguration meines Projekts zu erstellen.

  • Dies ist wahrscheinlich eines der häufigsten Probleme: Wenn Sie libcurl als STATIC-Bibliothek verwenden, müssen Sie CURL_STATICLIB nicht nur im Curl-Projekt definieren, sondern auch in dem Projekt, in dem Sie es verwenden möchten.

    – Peter K

    29. Oktober 2012 um 8:58 Uhr

  • Ein weiterer interessanter Punkt, den ich gerade getroffen habe: Sie können es im Hauptprojekt definieren und vergessen, es in einem anderen vcproj zu erwähnen, das Sie verwenden.

    – Dmitri Kotschkin

    11. Februar 2013 um 16:36 Uhr

  • Vielen Dank. Gehen Sie zu vc++ Projekteinstellungen | c++ | Präprozessor und fügen Sie die CURL_STATICLIB zu den Präprozessordefinitionen hinzu und es funktioniert

    – Silbermond

    22. Februar 2015 um 10:54 Uhr

  • Sie haben mir gerade eine Menge Arbeit und ein paar Haare erspart, die ich sonst ausgerissen hätte

    – Rick

    4. Juni 2015 um 6:13 Uhr

  • Fällt es nur auf MSVC an?

    – Triclosan

    17. Juli 2015 um 13:29 Uhr

Außer zu definieren CURL_STATICLIBfür mich war es auch notwendig, die folgenden Abhängigkeiten (einschließlich libcurl.lib oder libcurld.lib):

  • Ws2_32.lib
  • Wldap32.lib

  • Definieren CURL_STATICLIB hat meinen Speck gerettet! Vielen Dank!

    – T4cC0re

    30. Mai 2017 um 18:06 Uhr

  • Ich hatte mehrere weitere fehlende Abhängigkeiten, diese Antwort hat mir geholfen stackoverflow.com/questions/50477484/…

    – Stan

    16. Oktober 2020 um 10:23 Uhr

Ich bin auf ein ähnliches Problem gestoßen – ich habe festgestellt, dass ich auf den 64-Bit-Speicherort von libcurl.lib verwiesen habe. Das Link-Verzeichnis wurde auf den 32-Bit-Speicherort geändert und das Projekt wurde perfekt kompiliert.

Sieht so aus, als würden die Bibliotheken nicht erfolgreich verknüpft. Stellen Sie sicher, dass das Bibliotheksverzeichnis so eingestellt ist, dass es den vollständigen Pfad zur libcurl-DLL enthält. Stellen Sie außerdem sicher, dass diese Bibliothek tatsächlich zu Ihrem Projekt hinzugefügt wird.

Ich hatte das gleiche Problem. Ich habe geschrieben, wie ich es endlich machen konnte CurlLib funktioniert, hier:
http://quantcorner.wordpress.com/2012/04/08/using-libcurl-with-visual-c-2010/ wenn du mal schauen möchtest. Viel Glück!

Dies funktionierte für mich auf VS2017 – x86 Release/Debug – MFC Static Library

Öffnen Sie die Projekteigenschaften und überprüfen Sie Folgendes

  • C/C++ – Präprozessor – Präprozessordefinitionen – CURL_STATICLIB hinzufügen

  • Linker – Eingabe – Zusätzliche Abhängigkeiten – Hinzufügen (STRG+C)

ws2_32.lib

Normaliz.lib

Crypt32.lib

Wldap32.lib

libcurl_a.lib (libcurl_a_debug.lib für Debug-Konfiguration)

  • C/C++ – Allgemein – Zusätzliche Include-Verzeichnisse – Include-Ordner zu Header-Dateien hinzufügen

Benutzeravatar von Zsolti
Zsolti

Nach vielen Ideen und Konfigurationen habe ich das Problem gelöst, indem ich Folgendes hinzugefügt habe:

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

wo libcurl_a.lib ist der Name der Curl-Lib-Datei und lib ist der Ordner, der es enthält.

  • Vielen Dank. Das hat bei mir funktioniert! Fügte es zu einer der Header-Dateien hinzu. CURL_STATICLIB wurde in diesem Fall nicht benötigt, ich verwende übrigens meine selbst kompilierte Version von curl 7.70.0 mit: curl-7.70.0\winbuild> nmake /f Makefile.vc mode=dll. Verwenden Sie in diesem Fall: #pragma comment(lib, “lib/libcurl.lib”)

    – Eddz

    20. Mai 2020 um 10:51 Uhr

1394400cookie-checkNicht aufgelöste Symbole beim Verknüpfen eines Programms mit libcurl

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy