curl c
referencia indefinida a curl_global_init, curl_easy_init y otra funciĆ³n(C) (5)
Además de la respuesta de Joachim Pileborg, es útil recordar que la vinculación gcc / g ++ es sensible al orden y que las bibliotecas vinculadas deben seguir las cosas que dependen de ellas.
$ gcc -lcurl test.c
fallará , perdiendo los mismos símbolos que antes. Menciono esto porque vine a esta página por olvidar este hecho.
Estoy tratando de usar Curl en C.
Visité la página oficial de Curl y copié el código fuente de la muestra.
a continuación se encuentra el enlace: http://curl.haxx.se/libcurl/c/sepheaders.html
cuando ejecuto este código con el comando "gcc test.c",
la consola muestra un mensaje como a continuación.
/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''
No sé cómo resolver esto.
Dependiendo de cuán malas sean las cosas, es posible que necesite una -L / en algún lugar de LDFLAGS para que el vinculador sepa dónde están las bibliotecas. ldconfig se supone que debe recogerlos y encontrarlos en cada arranque, pero en una máquina nueva puede requerir un poco de esfuerzo, como agregar un directorio a su /etc/ld.so.conf.
No enlazas con la biblioteca.
Cuando use una biblioteca externa, debe vincularla :
$ gcc test.c -lcurl
La última opción le dice a GCC que vincule ( -l
) con el curl
la biblioteca.
Tengo el mismo problema, pero uso g ++ con un archivo make. Este es un problema de engarce. Necesita agregar la opción -lcurl en el compilador y en el enlazador. En mi caso en el archivo make:
CC ?= gcc
CXX ?= g++
CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl <- compile option
LDFLAGS += -lrt -lpthread -lcurl <- linker option
Gerard
las respuestas anteriores son correctas, sin embargo, no olvide agregar -o test para generar el binario; de lo contrario, solo generará los archivos del objeto.
gcc test.c -lcurl -o test