Pagina 1 di 4

Libreria cpr c++

Inviato: 21 giu 2018, 16:08
da DeltaElectronics
Buongiorno,
Volevo utilizzare per un mio progetto questa libreria che ho scaricato:
https://github.com/whoshuu/cpr;
Solo che quando provo a compilare l'esempio qua riportato:

Codice: Seleziona tutto

int main(int argc, char** argv) {
    auto r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"},
                  cpr::Authentication{"user", "pass"},
                  cpr::Parameters{{"anon", "true"}, {"key", "value"}});
}


Ottengo il seguente errore: C:\Users\~1\~\ccNPvCtN.o main.cpp:(.text+0x78): undefined reference to `cpr::Parameters::Parameters(std::initializer_list const&)...'
Come potrei risolvere ?
Il compilatore che uso è DevC++ (mingw).

Re: Libreria cpr c++

Inviato: 21 giu 2018, 16:47
da xyz
DevC++ è un IDE non un compilatore, MinGW è il porting del compilatore GNU GCC per API di Windows.

Quel codice manca di una cosa fondamentale l'include della libreria. Aggiungi prima del main la riga (come riportato nella documentazione):

Codice: Seleziona tutto

#include <cpr/cpr.h>

Re: Libreria cpr c++

Inviato: 21 giu 2018, 16:55
da DeltaElectronics
xyz ha scritto:DevC++ è un IDE non un compilatore, MinGW è il porting del compilatore GNU GCC per API di Windows.

Quel codice manca di una cosa fondamentale l'include della libreria. Aggiungi prima del main la riga (come riportato nella documentazione):

Codice: Seleziona tutto

#include <cpr/cpr.h>

Sì, mi ero dimenticato di trascriverlo.... in ogni caso nel programma che tento vanamente di compilare ovviamente la

Codice: Seleziona tutto

#include<cpr/cpr.h>

è presente.
Riusciresti ad aiutarmi ?
Grazie

Re: Libreria cpr c++

Inviato: 21 giu 2018, 17:16
da xyz
Io uso Linux come sistema operativo e ho compilato la libreria via Cmake. Quel esempio si compila senza nessun errore da linea di comando:

Codice: Seleziona tutto

g++ -I ../cpr/include  -L ../cpr-build/lib example.cpp -o example -lcpr

Quel errore è generato non dal compilatore ma dal linker, non trova il simbolo "cpr::Parameters::Parameters", molto probabilmente hai dimenticato di aggiungere il nome della libreria (opzione "-lcpr") e il percorso dove si trova (opzione "-L ../cpr-build/lib" il path dipende dove installata).

Re: Libreria cpr c++

Inviato: 21 giu 2018, 18:11
da DeltaElectronics
xyz ha scritto:Io uso Linux come sistema operativo e ho compilato la libreria via Cmake. Quel esempio si compila senza nessun errore da linea di comando:

Codice: Seleziona tutto

g++ -I ../cpr/include  -L ../cpr-build/lib example.cpp -o example -lcpr


Ti ringrazio e ti chiedo scusa se abuso ancora della tua pazienza, ma visto che è la prima volta in assoluto che uso una libreria non di sistema..... ne approfitto per chiedere altre domande che, spero, possano risolvere il mio problema.
Allora, innanzi tutto non trovo la cartella ../cpr-build/lib nel pacchetto che ho scaricato.
E' il risultato del building della libreria cpr ?
Come si,fa ? passo passo; perché ammetto di essere piuttosto ignorante in materia.
Grazie ancora della tua cortesia.

Re: Libreria cpr c++

Inviato: 21 giu 2018, 18:30
da xyz
Prima di tutto le tue domande sono chiaramente documentate nel manuale ufficiale del compilatore GNU GCC, che ti invito a leggere:

https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/

Opzione "-L":

https://gcc.gnu.org/onlinedocs/gcc-8.1. ... ml#index-L

indica il path dove si trova la libreria e come ho scritto dipende dove uno ha la libreria, io ho usato un path relativo alla directory dove ho compilato la libreria. Questa opzione funziona solo se la libreria esiste, se è stata compilata correttamente e se il percorso viene indicato corettamente, altrimenti il linker segnalerà un errore.

Re: Libreria cpr c++

Inviato: 22 giu 2018, 3:40
da DeltaElectronics
xyz ha scritto:Io uso Linux come sistema operativo e ho compilato la libreria via Cmake. Quel esempio si compila senza nessun errore da linea di comando:.

Hai utilizzato questo per caso: https://cmake.org/runningcmake/ ?

Re: Libreria cpr c++

Inviato: 22 giu 2018, 12:11
da xyz
Si, io uso la versione presente nella distribuzione Linux che uso. Da quello che ho visto quella libreria usa il sistema di compilazione via CMake.

Re: Libreria cpr c++

Inviato: 24 giu 2018, 17:58
da DeltaElectronics
xyz ha scritto:Si, io uso la versione presente nella distribuzione Linux che uso. Da quello che ho visto quella libreria usa il sistema di compilazione via CMake.

Buongiorno,

Ho provato ad usare Cmake ma ottengo solo degli errori, che sono riassunti nello screenshot e nei due file di testo contenuti nello .zip allegato.
Scusami se continuo nel rompere le scatole, ma sono ad un punto morto oltre al quale non riesco ad andare.
Grazie ancora.

Re: Libreria cpr c++

Inviato: 24 giu 2018, 18:21
da xyz
L'errore è evidente e viene riportato nella seguente riga:

...
set_property could not find TARGET libcurl.
...

Questa libreria dipende da altre librerie. Nella documentazione è scritto chiaramente i comandi che devi dare per prendere i sorgenti e per inizializzare i moduli esterni (submodule) con il seguente comando:

Codice: Seleziona tutto

...
git submodule update --init --recursive


in questo modo clonerà i repository necessari tra cui quello della libreria "libcurl" e la posizionerà nella opportuna directory in automatico. Se i moduli esterni sono inizializzati e aggiornati puoi eseguire CMake per compilare i sorgenti.

Se prendi i sorgenti da GIThub devi conoscere i comandi di GIT, la documentazione ufficiale spiega il funzionamento dei moduli esterni:

https://git-scm.com/docs/git-submodule