Подтвердить что ты не робот

Как связать 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"

Любые идеи по проблеме? Спасибо.

4b9b3361

Ответ 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