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. p>
code simple comme: p> compilé: p> compile bien.
Cependant, l'EXE se bloque à la fonction Compress.
Des idées? P> p>
4 Réponses :
En regardant le manuel de ZLIB, il dit:
ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen));
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 ?!)
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. P>
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. P>
Recompilez et cela fonctionnera. P>
Une autre solution consiste à installer Zlib vous-même du site Web Zlib.net. Supprimer celui de mingw-get. P>
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. P>
Téléchargez le code source zlib de http://www.zlib.net/ < / p> li>
Copiez tous les fichiers .c et .h du dossier racine de la source ZLIB vers un dossier de votre chemin de recherche du compilateur. P> LI>
Ajoutez les fichiers source ZLIB au projet IDE. P> LI>
Ajouter #include "zlib.h" à votre code source P> Li>
Appelez Compressez ou décompressez P> li> ol>
c'est tout. Cela pourrait difficilement être plus simple. P>
Tout ce que vous devez faire attention est la gestion de la mémoire, car ceci est Code C. P>
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: p>
C'est une description de la façon de Vendoriser i> ZLIB. Ils veulent utiliser le zlib du système, pas leur propre version de suivi en privé et à jour.
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: p> puis compilez votre code en exécutant quelque chose comme ceci: p> 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. P> P>
Comprenez-vous pourquoi vous devriez -lz code> au lieu de
-lzlib code>? J'ai vu que le paquet Zlib installe un fichier
libz.a code> (et un
libz.dl.al code>) 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 code> à des noms de bibliothèque, donc
-lz code> est la bonne option si vous souhaitez créer un lien vers
libz.a code>. Si un autre logiciel tente d'utiliser
-lzlib code> (au lieu de faire la bonne chose et d'exécuter
pkg-config zlib --Libs code> 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 code> sur
libzlib.a code> 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.