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