web-dev-qa-db-fra.com

référence non définie à curl_global_init, curl_easy_init et à une autre fonction (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 se trouve le lien: http://curl.haxx.se/libcurl/c/sepheaders.html

quand je lance 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.

35
Juneyoung Oh

Vous ne créez pas de lien avec la bibliothèque.

Lorsque vous utilisez une bibliothèque externe, vous devez link with:

$ gcc test.c -lcurl

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

75

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

$ gcc -lcurl test.c

échouera , manquant les mêmes symboles que précédemment. Je mentionne cela parce que je suis venu sur cette page pour oublier ce fait.

19
chirality

J'ai le même problème, mais j'utilise g ++ avec un fichier make . Il s'agit d'un problème lié à l'éditeur de liens . faire un fichier:

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

Gerard

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

gcc test.c -lcurl -o test

1
Drl Sherif Omran

En fonction de l'état des choses, vous aurez peut-être 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 temps, comme ajouter un répertoire à votre /etc/ld.so.conf.

0
Alan Corey