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 :

Installation librairie Curl


Sujet :

C++

  1. #1
    Membre du Club
    Installation librairie Curl
    Bonjour à vous ! J'ai commencé le c++ il y a quelques mois et j'essaye maintenant d'utiliser la librairie curl, c'est la première librairie que j'installe et me voilà un peu perdu, je suis sur windows et j'utilise Code Blocks, j'ai donc téléchargé le fichier zip windows sur le site officiel "curl-7.69.1.zip", après avoir regardé un peu partout sur le net j'ai ajouté dans les options de build deux dossier (dans l'onglet Search directories), le dossier include et le dossier lib. En exécutant un code d'essai venant du site officiel je me retrouve avec l'erreur "cannot find -lcurldll" j'ai donc sûrement oublié une étape. Merci à ceux qui sauront m'aider et merci à ceux qui ont pris le temps de lire.

  2. #2
    Membre du Club
    Bonjour, après avoir fait quelques essais la situation a changé ! J'ai télécharger la version qui correspondait à mon compilateur, et j'ai ajouté les trois dossier (lib,bin,include) dans l'onglet search directories dans les builds options, ça ne marche toujours pas, maintenant chaque fonction affiche le message "undefined reference to `_imp__curl_global_init". J'ai cru comprendre que peu importe la librairie l'installation était assez similaire, si quelqu'un qui a l'habitude d'en utiliser peut m'aider ce serait super. Merci

  3. #3
    Membre du Club
    J'ai trouvé ce tuto : https://alexandre-laurent.developpez...iotheque/#LI-A, je l'ai suivi à la lettre et maintenant l'erreur est : CURL_STATICLIB: No such file or directory, je sais vraiment plus quoi essayer ni de quelle manière procéder.

  4. #4
    Membre du Club
    En essayant avec la librarie 32 bits, la compilation se fait mais un autre message d'erreur à l’exécution: "Impossible d’exécuter le code, car libssl-1_1.dll est introuvable. La réinstallation du programme peut corriger ce problème." . libcurl a des dépendances ? Je dois donc joindre libssl aussi ? Merci de m'éclairer.

    EDIT : J'ai téléchargé les dll manquants sur le site: https://fr.dll-files.com/, quelqu'un peut me dire si ce site est fiable ? Je suis pas vraiment à l'aise avec le fait de télécharger un dll trouvé sur un site inconnu, mais comme je galère depuis longtemps je l'ai fait. Ca marche donc maintenant, même si j'ai pas l'impression de pouvoir utiliser les fonctions se servant d'openssl. Ce que j'ai fait marche mais c'est pas très propre c'est pourquoi je laisse le sujet ouvert en espérant que quelqu'un connaisse la façon correct de le faire, peut-être en incluant libssl aussi.

  5. #5
    Membre expert
    Je ne pense pas qu'ajouter des dossiers de recherche suffise, il faut aussi mettre explicitement les bibliothèques utilisées. La manière de procéder dépend des outils de build utilisés.

    libcurl a des dépendances ? Je dois donc joindre libssl aussi ?
    Oui

  6. #6
    Membre du Club
    Merci à toi pour la réponse ! Les deux fichiers manquants étaient libssl et libcrypto, donc si j'ai bien compris je dois appliquer la même démarche que j'ai utilisé pour libcurl pour ces deux librairies ? Désolé si je fais un peu répéter mais comme c'était ma première lib je ne suis vraiment pas sûr de ce que je fais et j'aimerais faire les choses proprement et pas seulement faire en sorte que ça marche. Encore merci

  7. #7
    Responsable 2D/3D/Jeux

    Citation Envoyé par Talsaj Voir le message
    EDIT : J'ai téléchargé les dll manquants sur le site: https://fr.dll-files.com/, quelqu'un peut me dire si ce site est fiable ? Je suis pas vraiment à l'aise avec le fait de télécharger un dll trouvé sur un site inconnu, mais comme je galère depuis longtemps je l'ai fait. Ca marche donc maintenant, même si j'ai pas l'impression de pouvoir utiliser les fonctions se servant d'openssl. Ce que j'ai fait marche mais c'est pas très propre c'est pourquoi je laisse le sujet ouvert en espérant que quelqu'un connaisse la façon correct de le faire, peut-être en incluant libssl aussi.
    Les DLL doivent être fournies avec libcurl (ou alors généré par la compilation de libcurl). Personnellement, je déteste les dll-files et je n'y apporte aucune confiance.
    Il faut que libssl*.dll soit à côté de votre exécutable. Au pire, il faut la récupérer sur le site officiel, binaire pour Windows.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre du Club
    Merci à toi pour la réponse, donc pas besoin de joindre la librairie entièrement mais seulement le *.dll demandé, merci à toi, je vais essayer de les trouver sur les sites officiels, le problème c'est que je les trouve seulement sur des sites de téléchargement de dll. Voici le github officiel de libssl: https://github.com/openssl/openssl et je ne trouve aucun fichier *.dll.

  9. #9
    Responsable 2D/3D/Jeux

    Possible, il faudra la compiler (mais je me demande si elle ne serait pas compiler en même temps que libcurl )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    Membre du Club
    Étonnant alors, j'ai du faire quelque chose de travers, mais je ne vois pas quoi, j'ai trouvé des *.dll sur : https://wiki.openssl.org/index.php/Binaries si jamais ça peut aider, ça fonctionne bien jusqu'ici, encore merci je passe le sujet en résolu.

  11. #11
    Responsable 2D/3D/Jeux

    J'ai dit que c'était possible, mais pas obligatoire. Pour les binaires (DLL) je ne les ai pas trouvés sur le site officiel ou sur le GitHub, c'est pour ça .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Membre du Club
    Le problème c'est que je voulais un exécutable statique, alors qu'actuellement l'exécutable ne peut pas marcher sans des *.dll à côté.







    Voici la configuration et à l'exécution j'ai ce message:



    Ca c'est ce qui se passe avec lib 32 bits, avec la 64 et exactement la même configuration le programme ne se compile pas car aucune fonction est reconnue ("curl_easy_init undefined reference"). Je ne sais plus vraiment comment m'y prendre, je vais essayer de me renseigner un peu plus sur le sujet et de faire d'autre essais, merci à vous.

    Les bibliothèques sont téléchargé sur le site officiel: https://curl.haxx.se/windows/, si vous avez besoin d'autre informations pour pouvoir m'aider n'hésitez pas. Mon ordinateur est un 64 bits je dois donc utiliser la version 64 bits ou c'est pas si simple que ça ?

  13. #13
    Responsable 2D/3D/Jeux

    Mon ordinateur est un 64 bits je dois donc utiliser la version 64 bits ou c'est pas si simple que ça ?
    Il faut que le compilateur supporte le 64 bits. Le MinGW par défaut de Code::Blocks ne l'est pas. Il faut soit un MinGW64, soit autre chose (clang, MSVC...).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Membre du Club
    Ah d'accord merci, et en 32 bits ça devrait passer ?

  15. #15
    Responsable 2D/3D/Jeux

    Avoir la bonne architecture permet juste d'enlever les erreurs de l'éditeur de lien ne trouvant pas les symboles. Pour la compilation en statique, il faut se référer à la documentation officielle.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  16. #16
    Membre du Club
    J'ai regardé tout les docs et tuto que j'ai pu trouver, à chaque fois ça a l'air très simple, renseigner les fichier *.a, ajouter le dossier include et le dossier lib. Je ne sais vraiment plus quoi faire. Je vais me renseigner sur d'autre librairies.

  17. #17
    Responsable 2D/3D/Jeux

    Oui, car les tutos se concentrent principalement à une liaison dynamique de la bibliothèque (et non une liaison statique). Une méthode très bourrine, qui je pense, ne marchera pas avec libcurl (car trop grosse), c'est d'intégrer tous les fichiers (.c et .h) de la lib à votre projet. Ensuite, vous oubliez de lier le libcurl.a et le tour pourrait être jouer.
    Pour d'autres bibliothèques, pour que ça marche en statique, il faut ajouter une macro, du style LIBCURL_STATIC

    Je remarque dans la documentation officielle, l'outil curl-config propose une option pour la liaison statique. Avez-vous regardé ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  18. #18
    Membre à l'essai
    Tu ne dois pas utiliser libcurl.a et libcurl.dll.a simultanément, ça n'a aucun sens

    Si tu veux utiliser la version partagée (dynamique) de libcurl: libcurl.dll.a et libcurl.dll
    Si tu veux utiliser la version statique de libcurl: libcurl.a

    De plus pour la version statique, il faut définir CURL_STATICLIB=1 à la compilation

    Au passage, si tu as bien récupéré les binaires à https://curl.haxx.se/windows/, tu n'as pas besoin de lier les dépendances de libcurl dans ton exécutable (car elles sont déjà liées statiquement dans les binaires fournis), ce qui va t'épargner une bonne prise de tête.


    Idéalement il faudrait que tu compiles libcurl toi même avec le même compilo que tu vas utiliser pour ton executable, mais libcurl n'est pas si simple à compiler pour un débutant (il a pas mal de dépendances que tu dois aussi compiler et lier du coup...).