【问题标题】:gcc won't include libcurl on commandline for OS Xgcc 不会在 OS X 的命令行中包含 libcurl
【发布时间】:2011-07-18 02:39:19
【问题描述】:

我正在尝试编译我一直在运行 OS X 的远程服务器上处理的 C 项目。该项目部分依赖于 libcurl。我只能通过我的管理员帐户远程访问机器。

当我尝试制作项目时,我不断收到与未定义 libcurl 函数和常量有关的错误。我的结论是编译器没有正确包含 libcurl。

我正在使用 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

它也失败了。谁能帮我解释一下这个问题?

【问题讨论】:

  • 我没有安装 fink,但您的第二个示例适用于系统 curl。我注意到在您的第二个示例中,您将输出发送到test.o,但由于您没有将-c 标志传递给gcc,这可能没有达到您的预期。

标签: c macos command-line curl libcurl


【解决方案1】:

一个编译行是:

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 上。

【讨论】:

  • 我有两个 curl-config 副本。 /usr/bin 中有一个与 /sw/bin/ 中的输出不同。因为 /sw/ 是包含我所有 fink 安装的目录,所以我选择那个目录。两者都没有在实践中真正起作用。
猜你喜欢
  • 2016-08-10
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2017-09-10
  • 2011-12-11
  • 2012-05-21
相关资源
最近更新 更多