11
votes

Utilisation de Zlib sous Windows Mingw

Je ne peux pas sembler avoir zlib à faire quoi que ce soit sur Mingw sous Windows sous Windows.

J'ai téléchargé zlib @ http://sourceforge.net/projects/mingw/files_beta/mingw/zlib/zlib-1.2.3-1-mingw32/ et mettre L'en-tête et les fichiers libèches au bon endroit.

code simple comme: xxx

compilé: xxx

compile bien. Cependant, l'EXE se bloque à la fonction Compress. Des idées?


0 commentaires

4 Réponses :


0
votes

En regardant le manuel de ZLIB, il dit:

ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
                           const Bytef *source, uLong sourceLen));


1 commentaires

Pour une raison quelconque, j'ai trouvé que Mingw dispose d'une bibliothèque de zlib et d'une bibliothèque de libz. Quand j'utilise libz, tout fonctionne. Je ne sais pas vraiment quelles sont les différences ou pourquoi le nom est en arrière, OH Wells. Le manuel indique que le tampon de sortie ne doit être plus de 12 octets plus que l'entrée, car c'est la pire compression des cas (en-tête de 10 octets et 2 octets pour ne pas avoir de compression?). Cela fonctionne maintenant avec la libz au lieu de zlib. Enfait, je pense que les fichiers de la bibliothèque ZLIB sont des fichiers que certains ont été installés accidentellement il y a longtemps à partir d'une missconfiguration. (P.S. aux mods: la réponse à votre propre bouton de questions ne fonctionne pas pour moi ?!)



0
votes

J'ai essayé d'utiliser le zlib de MSYS (accessible avec Mingw-get) et obtenu le même problème que décrit ci-dessous.

La solution consiste à effectuer une liaison statique au lieu d'utiliser la bibliothèque partagée. Il suffit de supprimer ou de renommer la bibliothèque d'importation libz.dll.a pour éviter le lien pour effectuer un lien avec le MSYS-Z.DLL.

Recompilez et cela fonctionnera.

Une autre solution consiste à installer Zlib vous-même du site Web Zlib.net. Supprimer celui de mingw-get.


0 commentaires

0
votes

Utiliser Zlib dans votre code est extrêmement simple, quelque chose que la documentation (ou les diverses réponses sur Stackoverflow que j'ai trouvé) ne rendez pas évidente.

La technique suivante fonctionne pour tout compilateur et IDE. Je l'ai testé dans Windows Mingw à l'aide du code: Blocs, c'est pourquoi je le pose comme une réponse à cette question.

  1. Téléchargez le code source zlib de http://www.zlib.net/ < / p>

  2. Copiez tous les fichiers .c et .h du dossier racine de la source ZLIB vers un dossier de votre chemin de recherche du compilateur.

  3. Ajoutez les fichiers source ZLIB au projet IDE.

  4. Ajouter #include "zlib.h" à votre code source

  5. Appelez Compressez ou décompressez

    c'est tout. Cela pourrait difficilement être plus simple.

    Tout ce que vous devez faire attention est la gestion de la mémoire, car ceci est Code C.

    Pour rendre les choses encore plus simples pour moi-même, j'ai mis en place une enveloppe C ++ que vous êtes invités à utiliser, comme celui-ci: xxx


1 commentaires

C'est une description de la façon de Vendoriser ZLIB. Ils veulent utiliser le zlib du système, pas leur propre version de suivi en privé et à jour.



7
votes

Je recommande d'utiliser MSYS2 pour ce genre de chose. Ces instructions supposent que vous souhaitez compiler un programme 64 bits, mais ils peuvent facilement être modifiés pour 32 bits.

Après avoir installé MSYS2, exécutez le raccourci "MingW-W64 Win64 Shell" dans votre menu Démarrer. Installez la machine à outils 64 bits en exécutant: xxx

puis compilez votre code en exécutant quelque chose comme ceci: xxx

i N'a pas vérifié votre code attentivement, mais j'ai pu exécuter votre code sans collision, votre code pourrait donc être correct. Votre code ne donne pas non plus de sortie, il est donc difficile de dire si cela fonctionnait vraiment.


3 commentaires

Comprenez-vous pourquoi vous devriez -lz au lieu de -lzlib ? J'ai vu que le paquet Zlib installe un fichier libz.a (et un libz.dl.al ) mais je n'ai pas compris pourquoi c'est différent sur ce système . Pour moi, cela compte parce que j'installe un package Python, LXML, que je ne peux pas modifier.


Eh bien, le lien de liaison achète automatiquement lib à des noms de bibliothèque, donc -lz est la bonne option si vous souhaitez créer un lien vers libz.a . Si un autre logiciel tente d'utiliser -lzlib (au lieu de faire la bonne chose et d'exécuter pkg-config zlib --Libs pour comprendre les arguments) et vous êtes Impossible de configurer ce logiciel pour utiliser les arguments corrects, je suppose que vous pouvez copier libz.a sur libzlib.a en tant que solution de contournement hacky.


Heureusement, la copie du fichier au nouveau nom a entraîné une réussite de la compilation. Je ne suis toujours pas convaincu que cela est censé être le même dossier, mais je vais le découvrir suffisamment.