Member 14737711 Ответов: 2

Мы столкнулись с проблемой связывания при компиляции кода с использованием CPR & CURL


я написал небольшую cpp-программу для вызова API с помощью метода GET. Столкнувшись с приведенной ниже проблемой связывания, пожалуйста, предложите, как решить эту проблему.

/tmp/ccu3AelN.o: In function `cpr::Response cpr::Get<std::string>(std::string&&)':
rest_api_call.cpp:(.text._ZN3cpr3GetIISsEEENS_8ResponseEDpOT_[_ZN3cpr3GetIISsEEENS_8ResponseEDpOT_]+0x19): undefined reference to `cpr::Session::Session()'
rest_api_call.cpp:(.text._ZN3cpr3GetIISsEEENS_8ResponseEDpOT_[_ZN3cpr3GetIISsEEENS_8ResponseEDpOT_]+0x4a): undefined reference to `cpr::Session::Get()'
rest_api_call.cpp:(.text._ZN3cpr3GetIISsEEENS_8ResponseEDpOT_[_ZN3cpr3GetIISsEEENS_8ResponseEDpOT_]+0x57): undefined reference to `cpr::Session::~Session()'
rest_api_call.cpp:(.text._ZN3cpr3GetIISsEEENS_8ResponseEDpOT_[_ZN3cpr3GetIISsEEENS_8ResponseEDpOT_]+0x68): undefined reference to `cpr::Session::~Session()'
/tmp/ccu3AelN.o: In function `void cpr::priv::set_option<std::string>(cpr::Session&, std::string&&)':
rest_api_call.cpp:(.text._ZN3cpr4priv10set_optionISsEEvRNS_7SessionEOT_[_ZN3cpr4priv10set_optionISsEEvRNS_7SessionEOT_]+0x2a): undefined reference to `cpr::Session::SetOption(std::string const&)'
collect2: error: ld returned 1 exit status


Что я уже пробовал:

Ниже приведен мой исходный код,

#включить "СЛР.ч"
#include<bits stdc++.h="">
использование пространства имен std;
тап_п()
{
соиь <&ЛТ; "действий: извлечь все продукты" на << епси;
авто р = РСП::сделать(сердечно-легочная реанимация::URL-адрес{ "https://jsonplaceholder.typicode.com/todos/1" });
//curl -XGET https://jsonplaceholder.typicode.com/todos/1
с std::соиь <&ЛТ; "вернул текст:" &ЛТ;&ЛТ; Р.текст <&ЛТ; функция std::епси;
}

2 Ответов

Рейтинг:
1

CPallini

Как вы связываете (здесь предложение: Сбой компиляции в Linux (G++) · проблема #201 · whoshuu/cpr · GitHub[^])?


Member 14737711

я скачал исходный код CPR и включил его в свой локальный каталог. Итак, при компиляции моя cpp-программа использует файл cpr.h.

CPallini

Но этого недостаточно. Вы должны связать свои объектные файлы с библиотекой.

Member 14737711

да, где я могу найти связывающие библиотеки i.e-L cpr/lib-l cpr

CPallini

Вы должны найти папку библиотеки в вашей системе. Например, если cpr.h файл находится в папке /home/user/cpr/include папка, то библиотека, возможно, находится в /home/user/cpr/lib и вы должны связаться с

-L /home/user/cpr/lib -l cpr

переключатели

Member 14737711

папка cpr не существует в моей файловой системе Unix. Пожалуйста, предложите, где я могу найти эти libraires на веб-сайте.

CPallini

Если вы в состоянии включить cpr.h (и вы смогли это сделать, потому что у вас не было ошибок компилятора, только ошибки компоновщика), то вы должны быть в состоянии найти соответствующую папку библиотеки (в противном случае у вас сломана установка библиотеки.

Рейтинг:
0

Richard MacCutchan

Вам не хватает модуля, содержащего определение cpr::Session Если он находится в библиотеке, то вам нужно добавить имя библиотеки в свою сборку. Проверьте документацию по СЛР, чтобы узнать, где она находится.


Member 14737711

Я просмотрел документ, но нашел только исходный код "СЛР". Я не нашел библиотечных файлов в предоставленном пути к исходному коду https://github.com/whoshuu/cpr

Richard MacCutchan

Это сторонняя библиотека, поэтому вам нужно поговорить с людьми, которые ее написали.

jungletek

Там нет никаких предварительно скомпилированных библиотек, вам нужно построить его самостоятельно.

Member 14737711

Пожалуйста, подскажите, с кем мне нужно связаться

Richard MacCutchan

Перечитайте мое предыдущее сообщение еще раз.