GCC не будет включать libcurl в командной строке для OS X - PullRequest
0 голосов
/ 18 июля 2011

Я пытаюсь скомпилировать проект C, над которым я работал, на удаленном сервере, работающем под управлением OS X. Проект частично зависит от 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

Это также не помогает. Может ли кто-нибудь помочь мне пролить свет на эту проблему?

1 Ответ

2 голосов
/ 18 июля 2011

Одна строка компиляции:

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 есть копия curl-config в /usr/bin.


Попробуйте эту тестовую программу:

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

...