référence indéfinie à curl global init, curl easy init et autres fonctions (C)

J'essaie d'utiliser Curl en C.

J'ai visité la page officielle de Curl et copié un exemple de code source.

Ci-Dessous est le lien: http://curl.haxx.se/libcurl/c/sepheaders.html

Quand j'exécute ce code avec la commande " gcc test.c"

La console affiche un message comme ci-dessous.

/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'

Je ne sais pas comment résoudre ce problème.

31
demandé sur Juneyoung Oh 2013-05-10 10:09:07

5 réponses

Vous n'avez pas de lien avec la bibliothèque.

Lorsque vous utilisez une bibliothèque externe, vous devez lier avec elle:

$ gcc test.c -lcurl

La dernière option indique à GCC de lien (-l) avec la bibliothèque curl.

69
répondu Some programmer dude 2013-05-10 06:13:56

En plus de la réponse de Joachim Pileborg, il est utile de se rappeler que la liaison gcc/g++ est sensible à l'ordre et que vos bibliothèques liées doivent suivre les choses qui en dépendent.

$ gcc -lcurl test.c

Échouera , manquant les mêmes symboles qu'avant. Je mentionne cela parce que je suis venu à cette page pour oublier ce fait.

17
répondu chirality 2016-10-12 21:26:45

J'ai le même problème, mais j'utilise g++ à l'aide d'un fichier. C'est un linker question. Vous devez ajouter l'option-lcurl sur le compilateur et l'éditeur de liens. Dans mon cas sur le fichier make:

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

Gerard

1
répondu Gerard 2017-06-09 07:06:00

Les réponses précédentes sont correctes, mais n'oubliez pas d'ajouter-O test pour produire le binaire, sinon vous ne générerez que les fichiers objet.

Test Gcc.essai c-lcurl-o

1
répondu Drl Sherif Omran 2017-12-30 20:50:44

Selon la gravité des choses, vous pourriez avoir besoin d'un-L / quelque part dans LDFLAGS pour indiquer à L'éditeur de liens où se trouvent les bibliothèques. ldconfig est censé les récupérer et les trouver à chaque démarrage, mais sur une nouvelle machine, cela peut prendre un peu de piquant, comme Ajouter un répertoire à votre / etc / ld. so. conf.

0
répondu Alan Corey 2018-05-15 23:31:50