Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Compilare libreria
Forum - C/C++ - Compilare libreria

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1932
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:52
Domenica, 03/03/2019
Ragazzi ho dei problemi nell'uso della libreria CURL

1°  dunque ho scaricato la dll

2° compilata con nmake dal prompt nativo di Visual Studio e compilata come static

3° copiata e inclusa nel progetto ed inclusa


Codice sorgente - presumibilmente C/C++

  1. #include "curl/curl.h"
  2.  
  3. #define CURL_STATICLIB





Compilo il progetto è ok.


Aggiungo


Codice sorgente - presumibilmente Plain Text

  1. Curl *curl = nullptr;



Compilo è ok.

Ma se inizializzo la lib


Codice sorgente - presumibilmente Plain Text

  1. curl = curl_easy_init();




Compilando ho questo errore:

Severity    Code    Description    Project    File    Line    Suppression State
Error    LNK2019    unresolved external symbol _curl_easy_init referenced in function "int __cdecl atcommand_discord(int,struct map_session_data *,char const *,char const *)" (?atcommand_discord@@YAHHPAUmap_session_data@@PBD1@Z)    map-server    C:\RO2\rathena\src\map\atcommand.obj    1    




come posso risolvere?

Ultima modifica effettuata da Thejuster il 03/03/2019 alle 10:27


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1590
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 18:36
Domenica, 03/03/2019
Non capisco cosa hai fatto. Una dll è già compilata, cosa hai fatto con nmake?

Devo modificare le opzioni di compilazioni per aggiungere la directory di culr alle librerie, includere curl.lib e copiare nella direcory di output curl.dll. in alternativa compila curl staticamente se non vuoi la dll

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1932
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:21
Lunedì, 04/03/2019
Scusami Juster, ma come dicevo e la prima volta che lo faccio.

Dunque la libreria curl non è già compilata. l'ho compilata seguendo questo tutorial.

https://www.youtube.com/watch?v=Eu7NFeg43T4

Ma siccome sto mettendo mani su un progetto molto grande, deve essere compatibile per linux.
perché in seguito questo programma deve essere compilato ed avviato su linux debian.

Si tratta di un server.

Dunque quello che fatto è:

Compilare la dll con visual studio tool.
Una volta compilato tutto, appaiono delle cartelle in builds.
quindi copio l'intera cartella includes e la porto nel progetto dove deve essere inclusa.
in più copio il file libcurl_a.lib e lo nella stessa cartella dove ho messo i file da includere.

successivamente modifico le proprietà del progetto, al linker.

Linker -> Input -> Addittional Dependency
ed aggiungo la variabile

Codice sorgente - presumibilmente Plain Text

  1. $(SolutionDir)3rdpary\curl\libcurl_a.lib




in seguito

Codice sorgente - presumibilmente Plain Text

  1. ACMD_FUNC(discord)
  2. {
  3.         nullpo_retr(-1, sd);
  4.  
  5.         curl_global_init(CURL_GLOBAL_ALL);  
  6.         CURL *curl = nullptr;




Severity    Code    Description    Project    File    Line    Suppression State

Error    LNK2019    unresolved external symbol _curl_global_init referenced in function "int __cdecl atcommand_discord(int,struct map_session_data *,char const *,char const *)" (?atcommand_discord@@YAHHPAUmap_session_data@@PBD1@Z)    map-server    C:\rathena\src\map\atcommand.obj    1    

Error    LNK1120    1 unresolved externals    map-server    C:\rathena\map-server.exe    1    


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1590
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:46
Venerdì, 08/03/2019
Testo quotato

Postato originariamente da Thejuster:
Scusami Juster, ma come dicevo e la prima volta che lo faccio.

Dunque la libreria curl non è già compilata. l'ho compilata seguendo questo tutorial.

https://www.youtube.com/watch?v=Eu7NFeg43T4

Ma siccome sto mettendo mani su un progetto molto grande, deve essere compatibile per linux.
perché in seguito questo programma deve essere compilato ed avviato su linux debian.

Si tratta di un server.

Dunque quello che fatto è:

Compilare la dll con visual studio tool.
Una volta compilato tutto, appaiono delle cartelle in builds.
quindi copio l'intera cartella includes e la porto nel progetto dove deve essere inclusa.
in più copio il file libcurl_a.lib e lo nella stessa cartella dove ho messo i file da includere.

successivamente modifico le proprietà del progetto, al linker.

Linker -> Input -> Addittional Dependency
ed aggiungo la variabile

Codice sorgente - presumibilmente Plain Text

  1. $(SolutionDir)3rdpary\curl\libcurl_a.lib




in seguito

Codice sorgente - presumibilmente Plain Text

  1. ACMD_FUNC(discord)
  2. {
  3.         nullpo_retr(-1, sd);
  4.  
  5.         curl_global_init(CURL_GLOBAL_ALL);  
  6.         CURL *curl = nullptr;




Severity    Code    Description    Project    File    Line    Suppression State

Error    LNK2019    unresolved external symbol _curl_global_init referenced in function "int __cdecl atcommand_discord(int,struct map_session_data *,char const *,char const *)" (?atcommand_discord@@YAHHPAUmap_session_data@@PBD1@Z)    map-server    C:\rathena\src\map\atcommand.obj    1    

Error    LNK1120    1 unresolved externals    map-server    C:\rathena\map-server.exe    1    


quello è un errore del linker e significa che la libreria non è linkata. Più di questo non posso dirti, io per non avere di questi problemi uso cmake e ti consiglio di fare altrettanto. Inoltre cmake può cercare e includere curl, vedi comando find().

PM Quote