Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [C++] Windows e curl

  1. #1

    [C++] Windows e curl

    ciao!
    ho installato cygwin su windows 7 e tra i pacchetti ho installato anche curl.
    ho creato questa funzione:
    codice:
    void Read::readUltimeEntrate() {
        curl_slist_append(headers, "Accept: application/json");
        curl_slist_append(headers, "Content-Type: application/json");
        curl_slist_append(headers, "charsets: utf-8");
        curl = curl_easy_init();
        if (curl) {
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/file.php");
            curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            res = curl_easy_perform(curl);
            if (CURLE_OK == res) {
                char *ct;
                res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
                if ((CURLE_OK == res) && ct) {
                    res = curl_easy_perform(curl);
                    cout << res << endl;
                }
            }
        }
        curl_easy_cleanup(curl);
    }
    nel file h ho incluso la libreria <curl/curl.h>.
    quando vado ad eseguire il programma mi escono tutti questi errori:
    codice:
    build/Debug/Cygwin-Windows/read.o: In function `_ZN4Read17readUltimeEntrateEv':
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:14: undefined reference to `_curl_slist_append'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:15: undefined reference to `_curl_slist_append'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:16: undefined reference to `_curl_slist_append'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:17: undefined reference to `_curl_easy_init'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:19: undefined reference to `_curl_easy_setopt'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:20: undefined reference to `_curl_easy_setopt'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:21: undefined reference to `_curl_easy_setopt'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:22: undefined reference to `_curl_easy_setopt'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:24: undefined reference to `_curl_easy_perform'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:28: undefined reference to `_curl_easy_getinfo'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:30: undefined reference to `_curl_easy_perform'
    /cygdrive/c/Users/admferrone/Desktop/Banca/read.cpp:35: undefined reference to `_curl_easy_cleanup'
    collect2: ld returned 1 exit status
    make[2]: *** [dist/Debug/Cygwin-Windows/banca.exe] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    da cosa può dipendere??

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    È un semplice problema di linking. Non hai specificato -lcurl nel Makefile o in generale nel tuo sistema di compilazione, che non so quale sia.

  3. #3
    uso gcc.
    questo il comando che do:
    codice:
    g++.exe -lcurl -o dist/Debug/Cygwin-Windows/banca build/Debug/Cygwin-Windows/main.o build/Debug/Cygwin-Windows/read.o

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    È un po' che non uso cygwin, per facilitare le cose esiste per caso la directory /usr/lib/pkgconfig/ e se sì cosa c'è dentro?

  5. #5
    non è èiù in /usr, ma direttamente in /lib.
    dentro ci sono vari file con estensione .pc, tra i quali c'è anche libcurl.pc.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ok allora dovresti avere anche un programma che si chiama pkg-config che è comodissimo.

    Dovresti poter eseguire questi comandi, prova a vedere l'output:
    $ pkg-config curl --cflags
    e
    $ pkg-config curl --libs

    Entrambi si usano sulla commandline tra apici rovesciati.

    Nel tuo caso di linking, ora ti serve:
    $ g++.exe -o dist/Debug/Cygwin-Windows/banca build/Debug/Cygwin-Windows/main.o build/Debug/Cygwin-Windows/read.o `pkg-config curl --libs`

    Invece il cflags lo avresti potuto usare in fase di compilazione:
    $ g++.exe -c main.c -o build/Debug/Cygwin-Windows/main.o `pkg-config curl --cflags`

    EDIT
    Ho scritto pkg-config ma sarà pkg-config.exe.

  7. #7
    uhm c'è qualcosa che nn va ancora.
    pkg-config l'ho dovuto installare perchè nn c'era.
    ho avviato il terminale cygwin:
    codice:
    $ pkg-config curl --cflags
    Package curl was not found in the pkg-config search path.
    Perhaps you should add the directory containing `curl.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'curl' found
    sto guardando un pò in giro ma nn ho trovato molte soluzioni fino adesso.

  8. #8
    ho cambiato così:
    codice:
    g++.exe `pkg-config libcurl --cflags`     `pkg-config libcurl --libs` -o dist/Debug/Cygwin-Windows/banca  build/Debug/Cygwin-Windows/main.o  build/Debug/Cygwin-Windows/read.o
    pare che libcurl venga riconosciuto.
    però mi ritorna l'errore di prima!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Mi riporti cosa ti stampa
    $ pkg-config libcurl --libs
    così vediamo le path complete delle tue librerie?

  10. #10
    ok, ecco qua:
    codice:
    $ pkg-config libcurl --libs
    -lcurl -lidn -liconv -llber -lldap -lgssapi -lheimntlm -lkrb5 -lhx509 -lcom_err -lasn1 -lwind -lheimbase -lroken -lcrypt -lssh2 -lssl -lcrypto -lz
    a quanto vedo -lcurl c'è.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.