55

我正在尝试在 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'

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

4

4 回答 4

103

你没有链接到图书馆。

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

$ gcc test.c -lcurl

最后一个选项告诉 GCC-l与库链接 () curl

于 2013-05-10T06:13:56.637 回答
34

除了 Joachim Pileborg 的回答之外,记住 gcc/g++ 链接对顺序很敏感并且您的链接库必须遵循依赖于它们的东西是有用的。

$ gcc -lcurl test.c

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

于 2015-01-27T18:04:06.147 回答
3

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

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

杰拉德

于 2017-06-09T07:06:00.470 回答
0

根据情况的糟糕程度,您可能需要在 LDFLAGS 中的某个位置使用 -L/ 来让链接器知道库在哪里。ldconfig 应该会在每次启动时拾取并找到它们,但在新机器上可能需要一些刺激,例如在 /etc/ld.so.conf 中添加一个目录。

于 2018-05-15T23:31:50.113 回答