CMake zlib build sur Windows
Je suis en train de construire zlib 1.2.8 pour Windows en utilisant CMake, mais j'obtiens les erreurs de compilation que je ne sais pas comment le résoudre.
Voici mon CMake GUI:
Cela génère sans erreur, mais lorsque je de construire la solution qui en résulte. J'obtiens cette erreur:
2>------ Construire commencé: Projet: zlib, Configuration: Release x64 ------
2> la Création de la bibliothèque C:/Users/erik/Documents/zlib/1.2.8/project/zlib-1.2.8-vc10/Release/zlib.lib et l'objet C:/Users/erik/Documents/zlib/1.2.8/project/zlib-1.2.8-vc10/Release/zlib.exp
2> gonfler.obj : error LNK2019: symbole externe non résolu inflate_fast référencé dans la fonction gonfler
2>infback.obj : error LNK2001: symbole externe inflate_fast
2>C:\Users\erik\Documents\zlib\1.2.8\project\zlib-1.2.8-vc10\Release\zlib.dll : fatal error LNK1120: 1 externes non résolus
Je ne sais pas comment je peux résoudre ce problème, j'ai donc reconnaissant de toute aide.
Vous pouvez télécharger une version pré-compilée de zlib. Juste au cas où.
OriginalL'auteur elveatles | 2015-04-08
Vous devez vous connecter pour publier un commentaire.
Selon https://wiki.apache.org/httpd/Win64Compilation très semblable erreur signifie:
J'ai pu réussir à construire avec un simple:
J'ai regardé ma cmake cache et je vois que AMD64 est définie sur false, contrairement à ce que votre cmake-gui fenêtre affiche. La valeur true, il en résulte toutes sortes d'erreurs de build pour moi, mais pas ceux que vous montrer.
CMakeLists.txt dit de cette option est de permettre à un AMD64 assemblée de mise en œuvre. Juste le faire sans que cela semble être la solution la plus simple.
Avec CMake la manière de spécifier des versions 64 bits est générateur spécifique et ne doit pas dépendre sur le projet. (AMD64 n'est pas l'un des "intégrée" variables cmake, c'est la coutume de la zlib projet); avec Visual Studio générateur de vous mettre la plate-forme pour x64 avec
-A x64
. Avec Ninja que vous venez de configurer le shell vous lancer cmake à partir avec une version 64 bits de l'outil de la chaîne. E. g. lancer CMake -G Ninja à partir de Visual Studio 64 bits en ligne de commande.Note: ceci est juste une solution. Veuillez vérifier ma réponse.
OriginalL'auteur bames53
Vous avez besoin contrib\masmx64\inffas8664.c inclus dans le fichier de projet visual studio.
Ce fichier contient
inflate_fast
fonction qui appelle correspondantasm
fonctions.Je n'ai aucune idée. Mais "contrib" signifie qu'Il n'est pas maintenu par zlib auteur, je pense.
Vous l'avez droit. Vous pouvez trouver le cause dans ma réponse
OriginalL'auteur Eun Suk Lee
Date: 20180804 (Aug 4ème 2018)
Tout en jouant avec l'assembleur de la vitesse, j'ai découvert que le problème est reproductible sur l' (actuellement) dernière version: v1.2.11 ([GitHub]: madler/zlib - Un massivement spiffy encore délicatement discrète bibliothèque de compression (http://zlib.net)).
Cette erreur se produit seulement (évidemment, OS: Gagner, de construire la chaîne d': VStudio et de l'assemblée accélérations activé) pour:
Ci-dessous est un "de la pile" (haut -> bas de est équivalent à extérieur -> intérieure) lors de la décompression.
Cas Normal:
Assembleur cas:
Problème:
#2. est manquant ("${ZLIB_SRC_DIR}/CMakeLists.txt" ne sais rien à propos de inffast8664.c), de sorte que la chaîne est brisée, conduisant à une défaillance de la bibliothèque.
Solution:
Faire CMakeLists.txt conscient de ce fichier, et c'est en ajoutant:
à ligne ~#158 (encadrée par
if(MSVC)
etelseif (AMD64)
conditionnelles).Publication complète des changements.
zlib-1.2.11-msvc_x64_asm_speedups.diff:
Ci-dessus est un diff. Voir [AINSI,]: Exécuter/Déboguer une application Django est UnitTests à partir du clic droit de la souris menu contextuel dans PyCharm Community Edition? (@CristiFati réponse) (Correctifs utrunner section pour savoir comment appliquer des correctifs sur Gagner (en gros, toute ligne qui commence avec un "+" signe va, et chaque ligne qui commence avec un "-" signe sort). Je suis à l'aide de Cygwin, btw.
J'ai également déposé ce patch pour [GitHub]: madler/zlib - Ms VisualStudio - Assembleur accélérations sur x64, mais je ne suis pas sûr de ce que son destin va être, car il y a plus de 100 tirer les demandes qui sont en attente.
Sortie:
Notes:
@EDIT0:
@MarkAdler commentaire ([GitHub]: madler/zlib - ASM zlib build sur Windows donne des résultats erronés) membres:
Ne sorte de la compilation d'avertissement (que tout le monde doit avoir vu (et ignoré)):
Apparemment, assembleur accélérations et VStudio ne s'entend pas très bien. De plus, sur x86 il y a plusieurs problèmes:
Un correctif est proposé par [AINSI,]: module dangereux pour SAFESEH image C++ (@NayanaAdassuriya réponse) (même si c'est pas directement lié à la question). En bref, inffas32.asm et de l'éditeur de liensl'option de [MME Docs]: /SAFESEH (l'Image est Sûre, les Gestionnaires d'Exception) ne correspondent pas. Pour se débarrasser d'elle, soit:
Depuis que j'utilise cmake de construire pour cmdline, j'ai trouvé une solution pour ce. Après CMakeFiles génération (mais avant), je précise:
Je suis sûr que cmake propose une façon de faire de la bonne façon, mais je n'ai pas à le trouver (je n'ai d'enquêter de manière approfondie sur).
Un méchant est un erreur de segmentation (Violation d'Accès) lors de la décompression. Pour cela, [GitHub]: madler/zlib - inffas32.asm struct/enum liaison à zlib 1.2.9 est nécessaire.
Après la fixation de ceux-ci, tout fonctionne bien, et les améliorations de performances sont similaires à x64.
OriginalL'auteur CristiFati