我正在尝试使用libcurl
,但未能正确设置。我一直在阅读过去几小时的文档,但我感到困惑和失落。 (这是我第一次使用带C的外部库)
根据these说明,我已正确配置并安装了libcurl
和curl-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
如果不解决问题,我真的很感激任何可能使我朝着正确方向前进的帮助。谢谢你的时间!
答案 0 :(得分:2)
你应该这样编译:
$ gcc chkspeed.c -o chkspeed $(curl-config --cflags) $(curl-config --libs)
以便gcc命令可以使用适当的CFLAGS
和LDFLAGS
来编译和链接libcurl
。
注意使用shell(比如bash)并执行如下命令时:
$ cmd1 arg1 arg2 $(cmd2 arg3)
shell将首先执行cmd arg3
并使用stdout
的{{1}}输出作为cmd2
的参数进行评估。让我们说cmd1
打印(在cmd2 arg3
)stdout
,然后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
。