gcc 不会在 OS X 的命令行上包含 libcurl

发布于 2024-11-24 08:09:54 字数 740 浏览 1 评论 0原文

我正在尝试编译一个我一直在运行 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

它也会失败。谁能帮助我阐明这个问题?

I'm trying to compile a C project I've been working on on a remote server that runs OS X. The project depends, in part, on libcurl. I only have access to the machine through my administrator account remotely.

When I attempt to make the project I keep getting errors relating to libcurl functions and constants not being defined. I conclude that libcurl is not being properly included by the compiler.

I'm using fink to install opensource software for all the dependencies ( postgres, curl, a few others ) and all the dependencies appear to work except curl.

My compiler command looks like:

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

If I make a test file like so:

/sw/bin/curl http://www.google.com/ --libcurl test.c

And then attempt to compile it with:

gcc test.c `/sw/bin/curl-config --cflags` `/sw/bin/curl-config --libs` -o test.o

It also fails. Can anyone help me shed some light on this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉墨 2024-12-01 08:09:54

一个编译行是:

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

One compilation line is:

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

This will take Client.c and generate Client.o, an object file. It doesn't need the library information; there is no linking taking place because of the -c option.

The other compilation line is:

gcc test.c `/sw/bin/curl-config --cflags` `/sw/bin/curl-config --libs` -o test.o

It is aconventional to end the names of executables with '.o'; it leads to confusion. However, if test.c only references functions from the standard libraries and libcurl, it should 'work'.

On my Mac, there is a copy of curl-config in /usr/bin.


Try this test program:

$ 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
$

This is on MacOS X 10.6.8.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文