undefined ссылка на curl_global_init, curl_easy_init и другую функцию (C)

Я пытаюсь использовать Curl в C.

Я посетил официальную страницу Curl и скопировал исходный код примера.

ниже ссылка: http://curl.haxx.se/libcurl/c/sepheaders.html

когда я запускаю этот код с помощью команды "gcc test.c",

на консоли отображается сообщение, как показано ниже.

/tmp/cc1vsivQ.o: In function 'main':
test.c:(.text+0xe1): undefined reference to 'curl_global_init'
test.c:(.text+0xe6): undefined reference to 'curl_easy_init'
test.c:(.text+0x10c): undefined reference to 'curl_easy_setopt'
test.c:(.text+0x12e): undefined reference to 'curl_easy_setopt'
test.c:(.text+0x150): undefined reference to 'curl_easy_setopt'
test.c:(.text+0x17e): undefined reference to 'curl_easy_cleanup'
test.c:(.text+0x1b3): undefined reference to 'curl_easy_cleanup'
test.c:(.text+0x1db): undefined reference to 'curl_easy_setopt'
test.c:(.text+0x1e7): undefined reference to 'curl_easy_perform'
test.c:(.text+0x1ff): undefined reference to 'curl_easy_cleanup'

Я не знаю, как это решить.

Ответ 1

Вы не связываетесь с библиотекой.

При использовании внешней библиотеки вы должны установить связь с ней:

$ gcc test.c -lcurl

Последний параметр указывает GCC на ссылку (-l) с curl библиотеки.

Ответ 2

В дополнение к ответу Йоахима Пилеборга полезно помнить, что привязка gcc/g++ чувствительна к порядку и что ваши связанные библиотеки должны следить за тем, что зависит от них.

$ gcc -lcurl test.c

не получится, пропуская те же символы, что и раньше. Я упоминаю об этом, потому что я пришел на эту страницу, чтобы забыть об этом факте.

Ответ 3

У меня такая же проблема, но я использую g++ с файлом make. Это проблема компоновщика. Вам нужно добавить опцию -lcurl в компилятор и компоновщик. В моем случае в файле make:

CC ?= gcc
CXX ?= g++
CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl  <- compile option
LDFLAGS += -lrt -lpthread -lcurl      <- linker option

Gerard

Ответ 4

предыдущие ответы верны, однако не забудьте добавить -o тест для создания двоичного файла, иначе вы будете генерировать только объектные файлы.

Тест gcc test.c -lcurl -o

Ответ 5

В зависимости от того, насколько плохие вещи вам может понадобиться -L/где-нибудь в LDFLAGS, чтобы позволить компоновщику узнать, где находятся библиотеки. Предполагается, что ldconfig забирает их и находит их при каждой загрузке, но на новой машине может потребоваться немного подталкивания, например, добавить каталог в ваш /etc/ld.so.conf.