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 :

Problème avec les librairies ZLIB et LIBPNG


Sujet :

Bibliothèques

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Problème avec les librairies ZLIB et LIBPNG
    Bonjour.
    Je m'en remets à vous pour résoudre un problème qui me prend la tête le jour et m'empêche de dormir la nuit.

    Je voudrais réaliser un moteur de jeu 2D en C++ qui ferait intervenir des images au format PNG.

    J'ai donc téléchargé les librairies GNUWin32 sur http://www.libpng.org/pub/png/libpng.html

    D'abord sur Dev C++ (un éditeur plutôt sympa qui m'avait attiré par sa simplicité par rapport à Microsoft Visual C++ 6), j'ai voulu ajouter cette librairie fort prometteuse...

    Je me coupe impoliment pour vous dire que je suis novice en C++. J'ai déjà réalisé une première version de mon projet en Delphi et je voulais gagner en performance avec le C++, mais je dois dire qu'il me ralentit pour l'instant.

    L'installation de la librairie consiste en une copie des fichiers .h .lib .dll et autres dans les répertoires adéquats. Je suis sous Windows, a priori cette méthode ne doit pas poser de problèmes.

    Installation faite, j'ai d'abord voulu tester une fonction simple pour savoir si j'avais bien installé la lib. ERREUR: zlib.h introuvable.
    Pas de problème, me dis-je, avec un léger rictus. Qu'à cela ne tienne, j'installe la libraire ZLIB de http://www.gzip.org/zlib/ (pour Windows, donc "DLL compiled") et je recommence. ERREUR: (bon, là j'avoue, je ne me souviens plus du message exact, mais je vais me rattraper).

    Là, je me dis "on va passer à tout hasard sur MSVC++, et on verra bien..."

    Je me suis alors dis que j'allias tester en premier lieu ZLIB (après tout, si elle ne fonctionne pas, aucune chance pour LIBPNG).

    Je teste une fonction simple de compression (la focntion compress) d'un tableau "unsigned char *" ~ là aussi problème pour manipuler ce genre de variables qui me sont pour le moins étrange, ben évidemment que je mets pas de signes devant des caractères... enfin bref ... pis char * et unsigned char ne peuvent pas faire la même chose ... mauvais signe ça ~ Eh bien vous savez quoi ? ERREUR: error LNK2001: unresolved external symbol _compress

    Et puis alors pour trouver des tuto, que ce soit pour ZLIB ou pour LIBPNG, 'faut se lever tôt. A part ZLIB pour PHP, mais bon là ça me sert pas à grand chose.

    Alors si quelqu'un pouvait m'aider ... j'ai quatre mois pour faire mon projet ... si je bloque sur des trucs comme ça, 'vais demander une rallonge d'un an et demi.

    Je suis certains d'être l'origine de mon problème, parce que ZLIB et LIBPNG sont des librairies qui ont fait leurs preuves...

    Je suis partant pour me risquer à une recompilation des librairies si elle m'est bien expliquée (pas du genre "C'est simple, tu fais x0xx0565dd dump sur le pointeur 0*9968aeer du registre win32 du distributeur de capuccino", du genre très explicite au doigt dans le nez près.)

    Je remercie d'avance tous les développeurs qui auront au moins lu mon post...
    à bientôt j'espère.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Euh... désolé, autant pour moi, j'ai trouvé mon erreur.
    C'est parce que je n'avait pas ajouté la librairie au projet... je pensais que le fait d'installer la lib dans l'environnement et de faire #include <zlib.h> suffiraient.

    Bref l'installation de ZLIB fonctionne. Je n'ai pas encore testé LIBPNG et pour cause: je suis tombé sur un problème bien plus curieux encore. Voici mon code:

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    #include <iostream>
    #include <zlib.h>
     
    int main(int argc, char *argv[]) {
      /* Mes variables */
     
      /* Mes paramètres de la fonction compress */
      Bytef *local__Bytef__my_text;
      Bytef *local__Bytef__my_compressed_text;
     
      uLongf local__uLongf__my_text_size;
      uLongf local__uLongf__my_compressed_text_size;
     
      int local__int__compression_result;
     
      /* Ma chaîne de caractères */
      char *myText;
     
      /* Je définis mon texte */
      myText = "Ceci est le texte a compresser";
     
      local__Bytef__my_text = (Bytef*)myText;
      local__uLongf__my_text_size = strlen(myText);
     
      local__Bytef__my_compressed_text = (Bytef*)malloc(sizeof(Bytef));
     
      system("CLS");
     
      std::cout << "La chaine qui va recuperer la compression vaut [" << local__Bytef__my_compressed_text << "]\r\n";
     
      /* Je compresse la chaîne de caractères */
     
      local__int__compression_result = compress(
                                               local__Bytef__my_compressed_text,
                                               &local__uLongf__my_compressed_text_size,
                                               local__Bytef__my_text,
                                               local__uLongf__my_text_size);
     
     
      /* Je compresse les données */
      /* J'affiche les valeurs */
     
      std::cout << "Ma chaine de caracteres vaut [" << local__Bytef__my_text << "] est a une taille de [" << local__uLongf__my_text_size << "]\r\n";
      std::cout << "\r\n";
      std::cout << "Z_OK vaut [" << Z_OK << "]\r\n";
      std::cout << "Z_DATA_ERROR vaut [" << Z_DATA_ERROR << "]\r\n";
      std::cout << "Z_MEM_ERROR vaut [" << Z_MEM_ERROR << "]\r\n";
      std::cout << "Z_BUF_ERROR vaut [" << Z_BUF_ERROR << "]\r\n";
      std::cout << "Z_STREAM_ERROR vaut [" << Z_STREAM_ERROR << "]\r\n";
      std::cout << "Z_VERSION_ERROR vaut [" << Z_VERSION_ERROR << "]\r\n";
      std::cout << "\r\n";
      std::cout << "local__int__compression_result vaut [" << local__int__compression_result << "]\r\n";
     
      /* Si la compression a fonctionné */
      switch (local__int__compression_result) {
     
        case Z_OK:
          std::cout << "La chaine a ete compressee\r\n";
          std::cout << "Ma chaine compressee a une taille de [" << local__uLongf__my_compressed_text_size << "]\r\n";
     
          /* La ligne qui provoque mon erreur */
          //std::cout << "Elle vaut [" << local__Bytef__my_compressed_text << "]\r\n";
          break;
     
        case Z_DATA_ERROR:
          std::cout << "La compression a echoue: data error\r\n";
          break;
     
        case Z_MEM_ERROR:
          std::cout << "La compression a echoue: pas assez de memoire\r\n";
          break;
     
        case Z_BUF_ERROR:
          std::cout << "La compression a echoue: La variable de sortie n'a pas une capacite suffisante\r\n";
          break;
     
        case Z_STREAM_ERROR:
          std::cout << "La compression a echoue: Stream error\r\n";
          break;
     
        case Z_VERSION_ERROR:
          std::cout << "La compression a echoue: version error\r\n";
          break;
     
        default:
          std::cout << "Une erreur est survenue\r\n";
          break;
     
      }
     
     
      system("PAUSE");
      return EXIT_SUCCESS;
    }
    Quand je compile et exécute le code dans l'état, il fonctionne normalement.

    Maintenant une erreur survient quand j'enlève les // de la ligne qui pose problème.

    Si aucun problème ne survient chez vous, voici ce qu'il se passe chez moi: la compression renvoie une erreur de type Z_BUF_ERROR. Le hic, c'est que même si l'affichage pouvait altérer la variable, cet affichage a lieu après l'exécution de la fonction compress().

    C'est le mystère le plus total...


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

Discussions similaires

  1. [Débutant] Google API Calendar v3 : problème avec les librairies
    Par StringBuilder dans le forum C#
    Réponses: 9
    Dernier message: 26/12/2014, 17h11
  2. Problème avec les librairies
    Par pedatic dans le forum C
    Réponses: 1
    Dernier message: 21/06/2009, 11h51
  3. [1.x] Problème avec les librairies Symfony
    Par Scalp4 dans le forum Symfony
    Réponses: 15
    Dernier message: 06/09/2008, 11h24
  4. Réponses: 1
    Dernier message: 09/10/2007, 06h44
  5. [GD] Problème avec la librairie GD et les header !!
    Par jesspepette dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/10/2005, 12h09

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