我正在尝试编译一个我一直在运行 OS X 的远程服务器上开发的 C 项目。该项目部分依赖于 libcurl。我只能通过我的管理员帐户远程访问该计算机。
当我尝试创建该项目时,我不断收到与未定义 libcurl 函数和常量相关的错误。我的结论是 libcurl 没有被编译器正确包含。</p>
我正在使用 fink 为所有依赖项(postgres、curl 和其他一些)安装开源软件,并且除curl 之外的所有依赖项似乎都可以工作。
我的编译器命令如下所示:
gcc -ggdb -ansi -Wall -D_GNU_SOURCE -L `/sw/bin/pg_config --libdir` `/sw/bin/curl-config --cflags` -I `/sw/bin/pg_config --includedir` -lpq -lcurl -lpthread -lm `/sw/bin/curl-config --libs` -c Client.c
如果我制作一个像这样的测试文件:
/sw/bin/curl http://www.google.com/ --libcurl test.c
然后尝试编译它:
gcc test.c `/sw/bin/curl-config --cflags` `/sw/bin/curl-config --libs` -o test.o
它也失败了。谁能帮我解释一下这个问题?
最佳答案
一个编译行是:
gcc -ggdb -ansi -Wall -D_GNU_SOURCE -L `/sw/bin/pg_config --libdir` \
`/sw/bin/curl-config --cflags` -I `/sw/bin/pg_config --includedir` \
-lpq -lcurl -lpthread -lm `/sw/bin/curl-config --libs` -c Client.c
这将获取Client.c
并生成Client.o
,一个目标文件。它不需要图书馆信息;由于 -c
选项,没有发生链接。
另一个编译行是:
gcc test.c `/sw/bin/curl-config --cflags` `/sw/bin/curl-config --libs` -o test.o
按照惯例,可执行文件的名称以“.o
”结尾;它会导致困惑。但是,如果 test.c
仅引用标准库和 libcurl 中的函数,那么它应该可以“工作”。
在我的 Mac 上,/usr/bin
中有一个 curl-config
的副本。
尝试这个测试程序:
$ cat curltest.c
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
if (curl_global_init(0) == CURLE_OK)
{
printf("CURL version %s\n", curl_version());
curl_global_cleanup();
}
else
fprintf(stderr, "Failed to initialize CURL\n");
return 0;
}
$ cc -o curltest $(curl-config --cflags) curltest.c $(curl-config --libs)
$ file curltest
curltest: Mach-O 64-bit executable x86_64
$ otool -L curltest
curltest:
/usr/lib/libcurl.4.dylib (compatibility version 6.0.0, current version 6.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
$ curltest
CURL version libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
$
这是在 MacOS X 10.6.8 上。
关于c - gcc 不会在 OS X 的命令行上包含 libcurl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728208/