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 :

Problème d'include de librairie


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut Problème d'include de librairie
    Bonjour ,

    J'ai fait pas mal de dev c++ lorsque j'étais à l'école, mais je me rends compte aujourd'hui que le travail précédant le code nous était mâché, parce-que là, je coince sur un truc qui je pense est relativement simple.

    Le contexte :

    Je m'essaie à un petit programme histoire de pratiqué un peu le cpp. Le but final de celui est la génération d'un qrcode.
    Pour ce faire j'ai téléchargé une librairie sur internet qui s'appelle quricol : La page de la librairie

    La problématique :

    Je n'ai pas la moindre idée de comment correctement ajouter cette librairie à mon main.cpp pour que celui ci fonctionne.
    Pour le moment, j'ai essayé en utilisant logiquement le répertoire C++, puis en le plaçant à coté de mon main.cpp, de sorte que l'arborescence ressemble à ça :



    Mais comment inclure tout ça dans mon main.cpp, voici ce que j'ai dans celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <iostream>
    #include "src/quricol.h"
    using namespace std;
     
    int main ()
    {
     
       cout << "Je serai content quand il n'y aura plus de bugs\n";
       return 0;
    }
    Hors, quand je lance mon programme avec la commande (je précise que je suis dans le répertoire du main.cpp)

    Il me met une série d’erreur que je ne sais ni analyser, ni corriger.
    Images attachées Images attachées   

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Il faudrait montrer le contenu de ton .h.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Merci de ton intérêt pour mon problème

    Le .h que j'include, tu peux en trouver le code ici (c'est une petite librairie, dossier cpp)

    http://users.telenet.be/ws36637/download/quricol.zip

    Je te metsle lien de tout ça parceque je suis pas du tout sur qu'il faille que j'include en premier. Car le fichier quricol.h se trouve dans le dossier src, mais aussi le dossier include, j'ai choisi de prendre celui dans le src, sans vraiment de logique.

    Quoi qu'il en soit, voici le code du .h que j'include, je t'avoue que je ne le comprends pas très bien, je pense qu'il permet de gérer le fait qu'une partie de la librairie est en C :
    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
     
    #pragma once
     
    #include "qrencode.h"
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    void WINAPI GeneratePNGW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
    void WINAPI GeneratePNGA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GeneratePNG  GeneratePNGW
    #else
    #define GeneratePNG  GeneratePNGA
    #endif // !UNICODE
     
    HBITMAP WINAPI GetHBitmapW(LPWSTR text, int margin, int size, QRecLevel level);
    HBITMAP WINAPI GetHBitmapA(LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GetHBitmap  GetHBitmapW
    #else
    #define GetHBitmap  GetHBitmapA
    #endif // !UNICODE
     
    void WINAPI GenerateBMPW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
    void WINAPI GenerateBMPA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GenerateBMP  GenerateBMPW
    #else
    #define GenerateBMP  GenerateBMPA
    #endif // !UNICODE
     
    void WINAPI GetPNGW(LPWSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
    void WINAPI GetPNGA(LPSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
    #ifdef UNICODE
    #define GetPNG  GetPNGW
    #else
    #define GetPNG  GetPNGA
    #endif // !UNICODE
     
    void WINAPI DestroyBuffer(void* buffer);
     
    #ifdef __cplusplus
    }
    #endif

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pense qu'il pète sur les defines et typedefs de Windows: Tu dois inclure <windows.h> avant cet en-tête.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Le problème étant que j'évolue sous un environnement linux, parce-que du coup windows.h, il connait pas ... y a t'il une solution ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ça dépendra de quoi dépend la bibliothèque, vu qu'il te faudra commencer par la recompiler pour linux (parce que pour l'instant, ce doit être une DLL ou LIB).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Merci de ton intérêt à mon problème, qui je dois dire, commence vraiment à me déprimer, parce-que j'ai vraiment pas d'idée de comment le solutionner par moi même, et mes recherches web ne mènent pas à grand chose ...

    Comme je l'indiquais plus haut, l'ensemble des fichiers que j'utilise se trouvent à cet endroit :

    http://users.telenet.be/ws36637/download/quricol.zip

    Je pense que j'ai vraiment besoin d'une âme charitable qui voudra bien m'aiguiller (énormément) dans mon tout petit projet.

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Le problème c'est que quricol est développé en Delphi, fourni pour Delphi et utilise l'API windows.
    The code is provided for Unicode Delphi versions and Delphi 7 is still Ansi.

    uses

    Windows, SysUtils, Classes, Graphics;
    Donc pour l'utiliser sous linux, il va te falloir la recompiler; et alors là... je pense qu'il serait plus simple de carrément la réécrire.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Ok, je vois le soucis ... j'abandonne donc ici l'utilisation de quricol.h sur linux ... je vais me concentrer sur qrencode librairie sur laquelle est basée quricol.h

    https://github.com/fukuchi/libqrencode

    Elle j'arrive à l'ajouter, mais j'arrive pas à la faire fonctionner puisque j'ai deux belle erreurs :

    main.c.text+0x23): undefined reference to `QRcode_encodeString'
    main.c.text+0xbf): undefined reference to `QRcode_free'
    lorsque j'essaie de faire tourner ce gentil minuscule programme ...

    http://softwaredevelopment.gr/736/cr...-codes-with-c/

    Je crois que j'ai passé trop de temps sous php, j'suis plus capable de rien faire en c++ , c'est aussi pour ça que j'essaie de m'y remettre ...

  10. #10
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    As-tu bien suivi l'étape Compile & Install du readme?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    J'ai effectivement suivi les étapes et il apparaitrait que l'installation s'est bien passée, puisque j'ai le fichier qrencode.h qui se trouve dans mon dossier usr/include

    Qui plus est, je n'est pas d'erreur lors de la déclaration du pointeur QRcode *qrcode, seulement lors de l'appel de la fonction en dessous, comme si, j'imagine, il ne trouvait pas le .c associé.

  12. #12
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Quel IDE utilises-tu? (si tu en utilises un)

  13. #13
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    La fonction QRcode_encodeString et la structure QRcode sont déclarés dans le même fichier (qrencode.h), donc s'il ne trouve pas l'un, il ne devrait pas trouver l'autre.
    Je suppose qu'en fait il ne trouve ni l'un ni l'autre, mais que comme QRcode est utilisé comme pointeur, il n'a pas besoin de le compiler à ce moment là (un pointeur fait toujours la même taille, quel que soit l'objet sur lequel il pointe).

    Je pense donc qu'il faut que tu lui spécifie, d'une manière ou d'une autre, le chemin pour qu'il trouve qrencode.h. Tout en gardant à l'esprit qu'il faut qu'il trouve également les autres en-têtes de la bibliothèque (ce qui signifie qu'un #include "/usr/include/qrencode.h" ne suffira pas).

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Des fonctions déclarées dans le même header ne signifient pas forcément qu'elles sont définies dans la même lib...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Oui mais c'est une erreur de compilation qu'il a, pas une erreur de link.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Je n'en utilises aucun, j'ai juste un petit serveur de test sous linux, sur lequel j'ai mis gcc pour pouvoir compiler. Pas d'ide ni quoi que ce soit d'autre.

    PS: Etant donné que c'est un serveur qui ne me sert à rien sauf à ce test, si le coeur t'en dit, je peux te donner un accès pour que tu vois ce qu'il en est.

    Quoi qu'il en soit, merci de m'aider, car, tout seul face à ces problèmes tout nouveau pour moi, c'est assez difficile.

  17. #17
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Ca doit faire 10 ans que je n'ai pas utilisé linux... je ne pourrais donc malheureusement pas t'aider plus, désolé.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Tant pis si quelqu'un d'autre est tenté par cette aide ultime ?

    Donc selon toi, le problème est qu'il ne trouve pas la librairie en fait ? et que le fait que le pointeur ne provoque pas d'erreur car il ne le compile pas encore.

    Néanmoins, si je change le type de pointeur et que je met Qrrfejhmjfd *qrcode, cela provoque une erreur spécifique à ça.

    Donc mon avis c'est que cela montre que le qrencode.h est correctement lu. En revanche, dès que j'appelle les fonctions ... ça pose des problèmes !!

  19. #19
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par r0d Voir le message
    Oui mais c'est une erreur de compilation qu'il a, pas une erreur de link.
    les undefined_reference sont des erreurs de link
    essaie de rajouter "-lqrencode" quand tu compiles pour voir.
    chez moi, avec -lqrencode,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <qrencode.h>
     
    int main() {
     
    	QRcode *qrc = QRcode_encodeString("foo", 0, (QRecLevel)0, QR_MODE_8, 1);
     
    	return 0;
    }
    compile correctement.

    edit: j'ai vraiment survoler la doc, les paramètres ont été mis plus ou moins à l'arrache pour que ça compile, j'ai casiment aucune idée de leur utilité réelle, donc ne pas copier mon code, c'était juste pour utiliser la lib et voir ou ça bloquait.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Merci, iradrille, c'était exactement ça le problème, maintenant j'arrive à compiler avec gcc et g++ !!

    Par contre, pour-quoi faut il ajouter -lqrencode ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHPPowerPoint] Problème d'include
    Par edelacro dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 02/02/2011, 00h44
  2. problèmes avec "include file" pour une page asp
    Par chipsense dans le forum ASP
    Réponses: 1
    Dernier message: 02/09/2005, 15h22
  3. Problème pour lier une librairie... (ANTLR)
    Par loupdeau dans le forum MFC
    Réponses: 4
    Dernier message: 03/06/2005, 10h12
  4. [JSP] problème d'include ou d'import
    Par lipao17 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/04/2005, 13h39
  5. Problème d'include sous Dev-c++ 4.9.8.0
    Par Argonz dans le forum Dev-C++
    Réponses: 16
    Dernier message: 20/11/2003, 17h36

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