在Linux上设置libcurl

时间:2018-02-10 23:48:51

标签: c linux curl

我正在尝试使用libcurl,但未能正确设置。我一直在阅读过去几小时的文档,但我感到困惑和失落。 (这是我第一次使用带C的外部库)

根据these说明,我已正确配置并安装了libcurlcurl-config。一个简单的C程序,只包含<curl/curl.h>编译;但是,当我运行任何示例程序(例如,chkspeed.c)时,我会收到以下“未定义”错误。

/tmp/ccprXNBB.o: In function `main':
chkspeed.c:(.text+0x1bf): undefined reference to `curl_version'
chkspeed.c:(.text+0x408): undefined reference to `curl_global_init'
chkspeed.c:(.text+0x40d): undefined reference to `curl_easy_init'
chkspeed.c:(.text+0x432): undefined reference to `curl_easy_setopt'
chkspeed.c:(.text+0x454): undefined reference to `curl_easy_setopt'
chkspeed.c:(.text+0x476): undefined reference to `curl_easy_setopt'
chkspeed.c:(.text+0x482): undefined reference to `curl_easy_perform'
chkspeed.c:(.text+0x4b0): undefined reference to `curl_easy_getinfo'
chkspeed.c:(.text+0x50b): undefined reference to `curl_easy_getinfo'
chkspeed.c:(.text+0x566): undefined reference to `curl_easy_getinfo'
chkspeed.c:(.text+0x5c9): undefined reference to `curl_easy_getinfo'
chkspeed.c:(.text+0x624): undefined reference to `curl_easy_getinfo'
chkspeed.c:(.text+0x66a): undefined reference to `curl_easy_strerror'
chkspeed.c:(.text+0x696): undefined reference to `curl_easy_cleanup'
chkspeed.c:(.text+0x69b): undefined reference to `curl_global_cleanup'
collect2: error: ld returned 1 exit status

以下是本指南中介绍的三个curl-config标志的输出结果。我不确定如何使用这些信息:

$: curl-config --cflags
-I/usr/local/include
$: curl-config --libs
-L/usr/local/lib -lcurl
$: curl-config --feature
IPv6
UnixSockets
libz
AsynchDNS

如果不解决问题,我真的很感激任何可能使我朝着正确方向前进的帮助。谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

你应该这样编译:

$ gcc chkspeed.c -o chkspeed $(curl-config --cflags) $(curl-config --libs)

以便gcc命令可以使用适当的CFLAGSLDFLAGS来编译和链接libcurl

注意使用shell(比如bash)并执行如下命令时:

$ cmd1 arg1 arg2 $(cmd2 arg3)

shell将首先执行cmd arg3并使用stdout的{​​{1}}输出作为cmd2的参数进行评估。让我们说cmd1打印(在cmd2 arg3stdout,然后shell将执行hello

所以

cmd1 arg1 arg2 hello

将以

执行
$ gcc chkspeed.c -o chkspeed $(curl-config --cflags) $(curl-config --libs)

因为$ gcc chkspeed.c -o chkspeed -I/usr/local/include -L/usr/local/lib -lcurl 的输出为curl-config --cflags-I/usr/local/include的输出为curl-config --libs