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

Bibliothèques Discussion :

Utilisation de gzstream pour compression / décompression


Sujet :

Bibliothèques

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut Utilisation de gzstream pour compression / décompression
    Bonjour !

    Je souhaite pouvoir manipuler des fichiers compressés dans mon programme C++. Pour cela je souhaite utiliser la librairie gzstream.
    J'ai téléchargé la source, décompressé le dossier et je l'ai placé dans /lib.
    J'utilise Code::Blocks et j'ai indiqué :
    Settings > Compiler & Debugger > Linker Settings > /lib/gzstream/libgzstream.a
    Et au début de mon code, j'ai bien mis :
    #include </lib/gzstream/gzstream.h>

    J'ai voulu tester les fonctions de gzstream avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        string inFile = "/home/monfichier.gz";
        string line;
        int nb_lignes = 0;
        igzstream igzStream;
        igzStream.open (inFile.c_str());
        while(getline (igzStream, line)) {
            nb_lignes++;
        }
        cout << nb_lignes;
        igzStream.close();
    Mais j'obtiens des messages d'erreurs en compilant (avec GNU GCC Compiler) mon programme :

    /lib/gzstream/libgzstream.a(gzstream.o)||In function `gzstreambuf::underflow()': |
    gzstream.C|| undefined reference to `gzread'|
    /lib/gzstream/libgzstream.a(gzstream.o)||In function `gzstreambuf::open(char const*, int)': |
    gzstream.C|| undefined reference to `gzopen'|
    /lib/gzstream/libgzstream.a(gzstream.o)||In function `gzstreambuf::close()': |
    gzstream.C|| undefined reference to `gzclose'|
    /lib/gzstream/libgzstream.a(gzstream.o)||In function `gzstreambuf::flush_buffer()': |
    gzstream.C|| undefined reference to `gzwrite'|
    ||=== Build finished: 4 errors, 0 warnings ===|


    Je me demande s'il n'y a pas une erreur de "linkage" vers la librairie, mais comme je ne suis pas très à l'aise avec ces notions je ne sais plus quoi faire...
    Pouvez-vous m'aider ?
    Merci par avance

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Avez vous bien insérer la bibliothèque :
    Settings > Compiler & Debugger > Linker Settings > /lib/gzstream/libgzstream.a
    Pour la cible debug et release ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Merci pour votre réponse,

    Lorsque je suis dans Linker Settings, il n'y a rien pour différencier les cibles debug et release (je ne peux renseigner le chemin de la librairie qu'une fois). Et lorsque j'accède au Linker Settings en étant en mode debug puis une nouvelle fois en étant en mode release, le chemin de la librairie est bien renseigné à chaque fois.
    En espérant avoir bien répondu à votre question !

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut
    Avez vous compilé la bibliothèque sur la même machine que celle où vous tenter de compiler votre programme ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Oui, je travaille en local pour l'instant !
    Selon vous j'ai renseigné tous les liens à renseigner, et de la bonne manière ? N'aurais-je pas fait une confusion ou oublié un fichier à lier ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut
    De la bonne manière, je ne pense pas, sinon cela marcherait.

    Pouvez-vous nous envoyer votre projet (compressé) s'il vous plait ?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour l'attention que vous portez à mon problème, mais je ne préfère pas envoyer l'intégralité du code car je ne le fais pas à titre de loisir (question de confidentialité). Je voulais juste savoir si ma manière de rattacher la librairie est correcte (apparemment non) et si non comment s'y prendre car je ne suis pas à l'aise avec ça. Bon si personne n'a une réponse évidente pour m'aider je vais continuer à chercher !

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut
    Mettez des chemins absolu.
    Sinon, essayez d'ajouter le répertoire contenant le .a en tant que répertoire de recherche dans Code::Blocks et mettre juste libgzstream.a dans l'autre menu.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    J'ai toujours mis des chemins absolus.
    Je viens d'essayer en plaçant le dossier gzstream dans /usr/lib/ plutot que /lib/ (et en changeant les chemins absolus, du coup) mais ça ne change rien.

    essayez d'ajouter le répertoire contenant le .a en tant que répertoire de recherche dans Code::Blocks et mettre juste libgzstream.a dans l'autre menu
    Je ne suis pas sure d'avoir bien compris ce passage : j'ai mis :
    #include </usr/lib/gzstream>
    Est-ce cela que vous vouliez dire ? En tout cas, ça ne fonctionne pas mieux, toujours les memes messages d'erreur. En fait, la panoplie de messages d'erreur que j'obtiens apparaissent meme avec cette seule ligne :
    C'est à dire que le message d'erreur me parle de gzread, gzwrite, gzclose etc... sans que je n'ai mentionné ceci dans mon code. Du coup je me demande à présent si le linkage vers la librairie ne serait pas en fait bon, et que le problème viendrait d'ailleurs ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 726
    Points
    219 726
    Billets dans le blog
    125
    Par défaut
    Le include qu'il faut faire, c'est celui du .h.

    J'ai testé, votre programme ne compile pas. J'ai testé le programme de test inclut avec la bibliothèque, cela fonctionne.

    Alors, j'ai regardé leur Makefile pour comprendre et bonne nouvelle, c'est très simple.
    Les erreurs que vous avez eu au tout départ (donc, repartez à la version de départ, sont normales). Elles ne sont pas lié à la bibliothèque que vous nous présentez, mais à une autre bibliothèque manquant.

    Dans le Makefile on trouve : "-lz". Cela veut dire que dans Code::Blocks, il faut rajouter "-lz" dans Linker Settings. Le fichier correspondant c'est libz.so.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Ingénieure novice !
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Ingénieure novice !
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Oh ca y est cela semble fonctionner !! Pour cela j'ai du rajouter dans Linker Settings "z" tout simplement (car avec -lz, j'obtenais "cannot find -l-lz")
    Merci beaucoup de m'avoir consacré du temps et d'avoir trouvé l'origine du problème ! Merci !! Je vais enfin pouvoir avancer ce projet !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compression/Décompression Gzip pour flux tcp
    Par alpha_one_x86 dans le forum Boost
    Réponses: 0
    Dernier message: 27/04/2012, 19h37
  2. logiciel pour compresser et décompresser tout les formats
    Par vampyer972 dans le forum Autres Logiciels
    Réponses: 12
    Dernier message: 28/02/2006, 19h29
  3. utilisation du mid pour tester le début d'un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 09/07/2004, 13h10
  4. Réponses: 36
    Dernier message: 13/05/2004, 18h22

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