Как связать libcurl с моей программой на С++ в Linux?
Мне нужно использовать libcurl в части программного обеспечения, которое я пишу на своей машине ubuntu. Я использую Eclipse для написания и компиляции всего программного обеспечения. Когда я помещаю файлы libcurl в ту же папку, что и файл .cpp, и включаю файл curl.h в заголовок, Когда я пытаюсь скомпилировать программу, он вызывает эти ошибки:
Building target: sms
Invoking: GCC C++ Linker
g++ -o"sms" ./src/sms.o
./src/sms.o: In function `main':
/home/geekman/workspace/sms/Debug/../src/sms.cpp:38: undefined reference to `curl_easy_init'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:42: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:44: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:46: undefined reference to `curl_easy_perform'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:47: undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
make: *** [sms] Error 1
Я взял содержимое папки include из libcurl и поместил их в ту же папку, что и файл .cpp. то в заголовке файла .cpp я набрал:
#include <curl/curl.h>
Я также пробовал:
#include "curl/curl.h"
Любые идеи по проблеме? Спасибо.
Ответы
Ответ 1
Вложения в заголовочные файлы просто прекрасны; ваша проблема возникает на этапе связывания. Чтобы связать с libcurl, вам нужно добавить параметр командной строки -lcurl
, если он установлен в стандартном каталоге:
g++ -o sms ./src/sms.o -lcurl
Если он не установлен в стандартном каталоге, вам также необходимо добавить -L/path/to/libcurl
, например. что-то вроде:
# Assuming that /home/geekman/workspace/libcurl is where libcurl.a is located
g++ -o sms ./src/sms.o -L/home/geekman/workspace/libcurl -lcurl
Также обратите внимание, что параметр -lcurl
должен появиться после списка файлов объектов, которые вы связываете, иначе он не будет правильно связываться.
Ответ 2
Вы можете попробовать использовать curl-config --libs
.
Ответ 3
Альтернативный ответ (первый - отличный). Рассмотрите возможность использования вывода, возвращаемого "pkg-config -libs libcurl" в качестве аргумента для вашего компилятора.
Например,
CPPFLAGS = `pkg-config --libs libcurl`
g++ $CPPFLAGS myfile.o
Pkg-config - стандартный способ для библиотек с открытым исходным кодом для связи с вами, как связать с ними /#include их файлы.
Ответ 4
Любой, кто использует ecplise CDT, вам нужно сделать следующее. Сначала на терминале введите
curl-config --libs
На моей машине результат
-L/usr/lib/i386-linux-gnu -lcurl
тогда сделайте в соответствии с этим снимком экрана, и вы сможете скомпилировать. btw не забудьте добавить заголовочные файлы в свой код
![enter image description here]()
Итак, вы вводите путь к папке библиотеки без -L и имени библиотеки без -l, потому что они будут автоматически добавлены компоновщиком.
Ответ 5
Вам нужно связать библиотеку с вашей программой. С помощью gcc (и большинства других компиляторов) вы можете указать библиотеки для ссылки на -lname_wo_lib, например. -lcurl
Ответ 6
Также см. Руководство GNU GCC - Опции для привязки для подробного объяснения вариантов, которые сказал Адам Розенфилд. Для стандартных каталогов поиска см. Введение в GCC - для компиляторов GNU gcc и g++ - Настройка путей поиска.