2013-05-10 7 views
25

Ich versuche, Locken zu verwenden, in C.undefined Verweis auf curl_global_init, curl_easy_init und andere Funktion (C)

I Locken offizielle Seite besucht und kopiert Beispielquellcode.

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

wenn ich diesen Code mit dem Befehl "gcc test.c" laufen,

die Konsole zeigt Meldung 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 man das löst.

Antwort

62

Sie verknüpfen nicht mit der Bibliothek.

Bei Verwendung einer externen Bibliothek Sie Link damit muss:

$ gcc test.c -lcurl 

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

12

Zusätzlich zu Joachim Pileborgs Antwort ist es nützlich, sich daran zu erinnern, dass die Verknüpfung von gcc/g ++ der Reihenfolge nach empfindlich ist und dass Ihre verknüpften Bibliotheken den Dingen folgen müssen, die von ihnen abhängen.

$ gcc -lcurl test.c

wird, nicht die gleichen Symbole wie vor fehlt. Ich erwähne das, weil ich auf diese Seite gekommen bin, um diese Tatsache zu vergessen.

0

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

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

Gerard

1

die bisherigen Antworten sind richtig, aber vergessen Sie nicht, -o-Test zur Erzeugung des binären hinzuzufügen, andernfalls erzeugen Sie nur die Objektdateien .

gcc test.c -lcurl -o test