undefinierter Verweis auf curl_global_init, curl_easy_init und andere Funktionen (C)

Lesezeit: 3 Minuten

Ich versuche, Curl in C zu verwenden.

Ich habe die offizielle Seite von Curl besucht und den Beispielquellcode kopiert.

unten ist der link:
http://curl.haxx.se/libcurl/c/sepheaders.html

Wenn ich diesen Code mit dem Befehl “gcc test.c” ausführe,

Die Konsole zeigt eine Nachricht wie unten.

/tmp/cc1vsivQ.o: In function `main':
test.c:(.text+0xe1): undefined reference to `curl_global_init'
test.c:(.text+0xe6): undefined reference to `curl_easy_init'
test.c:(.text+0x10c): undefined reference to `curl_easy_setopt'
test.c:(.text+0x12e): undefined reference to `curl_easy_setopt'
test.c:(.text+0x150): undefined reference to `curl_easy_setopt'
test.c:(.text+0x17e): undefined reference to `curl_easy_cleanup'
test.c:(.text+0x1b3): undefined reference to `curl_easy_cleanup'
test.c:(.text+0x1db): undefined reference to `curl_easy_setopt'
test.c:(.text+0x1e7): undefined reference to `curl_easy_perform'
test.c:(.text+0x1ff): undefined reference to `curl_easy_cleanup'

Ich weiß nicht, wie ich das lösen soll.

Sie verlinken nicht mit der Bibliothek.

Wenn Sie eine externe Bibliothek verwenden, müssen Sie Verknüpfung damit:

$ gcc test.c -lcurl

Die letzte Option weist GCC an, zu verknüpfen (-l) mit der Bibliothek curl.

  • @Accountantم Wenn es nur ein Rauschen gibt curl Bibliothek, wird sie statisch gelinkt. Andernfalls, wenn es dynamisch ist, wird es dynamisch verknüpft.

    – Irgendein Programmierer-Typ

    24. Februar 2019 um 8:34 Uhr

Benutzeravatar von chirality
Chiralität

Zusätzlich zur Antwort von Joachim Pileborg ist es hilfreich, sich daran zu erinnern, dass das Verknüpfen von gcc/g++ empfindlich auf die Reihenfolge reagiert und dass Ihre verknüpften Bibliotheken den Dingen folgen müssen, die von ihnen abhängen.

$ gcc -lcurl test.c

wird versagen, es fehlen die gleichen Symbole wie zuvor. Ich erwähne dies, weil ich auf diese Seite gekommen bin, weil ich diese Tatsache vergessen habe.

  • Können Sie mir bitte sagen warum gcc -lcurl test.c wird versagen aber gcc test.c -lcurl hat gut funktioniert?

    – Fahrbahn

    14. August 2018 um 15:09 Uhr

  • @Lane Die gcc -lcurl test.c schlägt fehl, da gcc die Dateien in der Reihenfolge der Eingabe verknüpft, sodass es beispielsweise nicht referenzieren kann curl_global_init – in Dateien erscheinen nach test.c.

    – Ebrahimi

    14. Oktober 2018 um 5:52 Uhr

  • Vielen Dank für diesen Beitrag!!!! Das hat meinen Tag gerettet. Nachdem ich diesen Beitrag gelesen habe, habe ich gerade die Reihenfolge der Verknüpfungsbibliotheken geändert und konnte erfolgreich kompilieren und verknüpfen.

    – Ashish Mittal

    20. November 2018 um 4:28 Uhr

Ich habe das gleiche Problem, aber ich verwende g++ mit einer Make-Datei. Dies ist ein Linker-Problem. Sie müssen die Option -lcurl auf dem Compiler und dem Linker hinzufügen. In meinem Fall in der Make-Datei:

CC ?= gcc
CXX ?= g++
CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl  <- compile option
LDFLAGS += -lrt -lpthread -lcurl      <- linker option

Gerhard

Je nachdem, wie schlecht die Dinge sind, benötigen Sie möglicherweise ein -L/irgendwo in LDFLAGS, um den Linker wissen zu lassen, wo sich die Bibliotheken befinden. ldconfig soll sie aufnehmen und bei jedem Start finden, aber auf einer neuen Maschine kann es ein wenig Anschubsen erfordern, wie das Hinzufügen eines Verzeichnisses zu Ihrer /etc/ld.so.conf.

1412690cookie-checkundefinierter Verweis auf curl_global_init, curl_easy_init und andere Funktionen (C)

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

Privacy policy