未定义引用curl_global_init,curl_easy_init和其他函数(C)

时间:2013-05-10 06:09:07

标签: c curl libcurl

我正在尝试在C中使用Curl。

我访问了Curl官方页面,并复制了示例源代码。

下面是链接: http://curl.haxx.se/libcurl/c/sepheaders.html

当我使用命令“gcc test.c”运行此代码时,

控制台显示如下信息。

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

我不知道如何解决这个问题。

5 个答案:

答案 0 :(得分:80)

您没有与图书馆链接。

使用外部库时,您必须链接

$ gcc test.c -lcurl

最后一个选项告诉GCC将(-l)与库curl相关联。

答案 1 :(得分:21)

除了Joachim Pileborg的回答之外,记住gcc / g ++链接对订单敏感以及链接库必须遵循依赖于它们的内容是很有用的。

$ gcc -lcurl test.c

将失败,缺少与之前相同的符号。我提到这一点是因为我来到这个页面是因为忘记了这个事实。

答案 2 :(得分:1)

我有同样的问题,但我使用g ++和make文件。 这是一个链接器问题。 您需要在编译器和链接器上添加选项-lcurl。 在我的情况下,在make文件:

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

杰拉德

答案 3 :(得分:1)

之前的答案是正确的,但不要忘记添加-o test来生成二进制文件,否则您将只生成目标文件。

gcc test.c -lcurl -o test

答案 4 :(得分:0)

根据LDFLAGS中可能需要-L /某处的内容,让链接器知道库的位置。 ldconfig应该在每次启动时都能找到它们,但是在新机器上它可能需要一点点刺激,比如在/etc/ld.so.conf中添加一个目录。