Ответ 1
Вы не связываетесь с библиотекой.
При использовании внешней библиотеки вы должны установить связь с ней:
$ gcc test.c -lcurl
Последний параметр указывает GCC на ссылку (-l
) с curl
библиотеки.
Я пытаюсь использовать 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'
Я не знаю, как это решить.
Вы не связываетесь с библиотекой.
При использовании внешней библиотеки вы должны установить связь с ней:
$ gcc test.c -lcurl
Последний параметр указывает GCC на ссылку (-l
) с curl
библиотеки.
В дополнение к ответу Йоахима Пилеборга полезно помнить, что привязка gcc/g++ чувствительна к порядку и что ваши связанные библиотеки должны следить за тем, что зависит от них.
$ gcc -lcurl test.c
не получится, пропуская те же символы, что и раньше. Я упоминаю об этом, потому что я пришел на эту страницу, чтобы забыть об этом факте.
У меня такая же проблема, но я использую g++ с файлом make. Это проблема компоновщика. Вам нужно добавить опцию -lcurl в компилятор и компоновщик. В моем случае в файле make:
CC ?= gcc
CXX ?= g++
CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl <- compile option
LDFLAGS += -lrt -lpthread -lcurl <- linker option
Gerard
предыдущие ответы верны, однако не забудьте добавить -o тест для создания двоичного файла, иначе вы будете генерировать только объектные файлы.
Тест gcc test.c -lcurl -o
В зависимости от того, насколько плохие вещи вам может понадобиться -L/где-нибудь в LDFLAGS, чтобы позволить компоновщику узнать, где находятся библиотеки. Предполагается, что ldconfig забирает их и находит их при каждой загрузке, но на новой машине может потребоваться немного подталкивания, например, добавить каталог в ваш /etc/ld.so.conf.