IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comment Installer et compiler avec libcurl en utilisant Clion (Cmake + gcc) ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Ralof_le_Roux
    Homme Profil pro
    Apprenti sorcier
    Inscrit en
    Septembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti sorcier

    Informations forums :
    Inscription : Septembre 2016
    Messages : 18
    Par défaut Comment Installer et compiler avec libcurl en utilisant Clion (Cmake + gcc) ?
    Bonjour,

    depuis quelque temps je cherche à développer quelques fonctionnalités avec la libcurl.
    Seulement ma contrainte est de le faire sur Windows, et je ne suis pas vraiment habitué.
    Je précise que je code sous Clion et que je ne souhaite pas changer pour VS ou CB pour diverses raisons.

    J'ai télécharger la lib, je possède actuellement un .a, un .dll et un .dlla

    Je n'arrive pas à ajouter correctement la lib à mon projet ("undifned reference to ... <curl functions>")

    Je sais que c'est quelque chose à faire dans le Cmake, et déplacer ma lib quelque part, mais j'ai beaucoup de mal à comprendre efficacement les étapes et la procédure.

    A vrai dire je suis perdu

    Quelqu'un pourrait-il m'éclairer ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Windows ou pas, on s'en moque si tu utilises CMake.
    Tu as déjà téléchargé les fichiers, mets-les où ça t'arrange, un dossier lib dans l'arbo du projet par exemple.
    Ensuite link_directories pour ajouter le dossier où se trouve le .a et target_link_libraries pour les lier.
    include_directories sera aussi probablement utile.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti Avatar de Ralof_le_Roux
    Homme Profil pro
    Apprenti sorcier
    Inscrit en
    Septembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti sorcier

    Informations forums :
    Inscription : Septembre 2016
    Messages : 18
    Par défaut
    Merci de ta réponse rapide !
    Effectivement Windows ou pas, cmake ne change pas.

    Le Cmake devrait donc ressembler à quelque chose de similaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cmake_minimum_required(VERSION 3.10)
    project(curl_test2 C)
    set(CMAKE_C_STANDARD 99)
    set(SRCS
        srcs/main.c)
    link_directories(lib)
    add_executable(curl_test2 ${SRCS})
    target_link_libraries(curl_test2 curl)

    Mon projet suit cette arborescence:

    include
    -curl
    -curl.h
    lib
    -libcurl.a
    srcs
    -main.c


    Cependant j'ai quand même une erreur à la compilation : "undefined reference to `_imp__curl_easy_init'" + toutes les fonctions de curl

    Voici mon main de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include <stdio.h>
    //#include "curl/curl.h"
    #include "../include/curl/curl.h"
    #include <sys/stat.h>
    #include <fcntl.h>
     
    int main(void)
    {
        CURL *curl;
        CURLcode res;
        struct stat file_info;
        double speed_upload, total_time;
        FILE *fd;
     
        fd = fopen("debugit", "rb"); /* open file to upload */
        if(!fd)
            return 1; /* can't continue */
     
        /* to get the file size */
        if(fstat(fileno(fd), &file_info) != 0)
            return 1; /* can't continue */
     
        curl = curl_easy_init();
        if(curl) {
            /* upload to this place */
            curl_easy_setopt(curl, CURLOPT_URL,
                             "file:///home/dast/src/curl/debug/new");
     
            /* tell it to "upload" to the URL */
            curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
     
            /* set where to read from (on Windows you need to use READFUNCTION too) */
            curl_easy_setopt(curl, CURLOPT_READDATA, fd);
     
            /* and give the size of the upload (optional) */
            curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
                             (curl_off_t)file_info.st_size);
     
            /* enable verbose for easier tracing */
            curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
     
            res = curl_easy_perform(curl);
            /* Check for errors */
            if(res != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                        curl_easy_strerror(res));
     
            }
            else {
                /* now extract transfer info */
                curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed_upload);
                curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total_time);
     
                fprintf(stderr, "Speed: %.3f bytes/sec during %.3f seconds\n",
                        speed_upload, total_time);
     
            }
            /* always cleanup */
            curl_easy_cleanup(curl);
        }
        fclose(fd);
        return 0;
    }

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Ca donne quoi avec target_link_libraries(curl_test2 libcurl.a) ?

  5. #5
    Membre averti Avatar de Ralof_le_Roux
    Homme Profil pro
    Apprenti sorcier
    Inscrit en
    Septembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Apprenti sorcier

    Informations forums :
    Inscription : Septembre 2016
    Messages : 18
    Par défaut
    Bonjour !

    Cela donne la même chose.

    Le problème vient très sûrement du linkage (peut être qu'il faut que je fasse un include directory comme il a été dit ? Mais je ne vois pas ce que cela permettrait)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Faut pas tester n'importe quoi au petit bonheur.
    L'include directory sert comme son nom l'indique aux includes.. et c'est ton éditeur de liens qui gueule..
    set(SRCS srcs/main.c) Et avec set(SRCS "srcs/main.c") ?
    link_directories(lib) où est-ce que lib est défini ? link_directories("lib") peut-être ? Et lib est bien accessible depuis cmake ?
    target_link_libraries(curl_test2 curl) où est-ce que curl est défini ? target_link_libraries(curl_test2 "curl") ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/03/2012, 23h41
  2. [Batch] Comment installer des certificats avec NSIS
    Par maanifiik dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 07/04/2010, 11h18
  3. Comment installer une imprimante qui fonctionne en utilisant le protocole LPR?
    Par masterx_goldman dans le forum Périphériques
    Réponses: 0
    Dernier message: 12/08/2009, 20h03
  4. Réponses: 7
    Dernier message: 19/05/2009, 11h15
  5. [Installation DirectX]Compiler avec Code::Blocks
    Par elmodeno dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/11/2007, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo