2015-04-08 7 views
7

Ich versuche, zlib 1.2.8 für Windows mit CMake zu bauen, aber ich bekomme Build-Fehler, die ich nicht wissen, wie zu beheben. Hier ist meine CMake GUI:CMake zlib Build auf Windows

enter image description here

Dies ohne Fehler erzeugt, aber wenn ich die resultierende Lösung aufzubauen. Ich erhalte diesen Fehler:

2>------ Build started: Project: zlib, Configuration: Release x64 ------
2> Creating library C:/Users/erik/Documents/zlib/1.2.8/project/zlib-1.2.8-vc10/Release/zlib.lib and object C:/Users/erik/Documents/zlib/1.2.8/project/zlib-1.2.8-vc10/Release/zlib.exp
2> inflate.obj : error LNK2019: unresolved external symbol inflate_fast referenced in function inflate
2>infback.obj : error LNK2001: unresolved external symbol inflate_fast
2>C:\Users\erik\Documents\zlib\1.2.8\project\zlib-1.2.8-vc10\Release\zlib.dll : fatal error LNK1120: 1 unresolved externals

Ich weiß nicht, wie ich das beheben kann, so schätze ich jede Hilfe.

+1

Mit Blick auf die CMakeLists.txt-Datei bin ich mir nicht sicher, was das Problem mit CMake hier ist. Sie könnten versuchen, die beigesteuerte Visual Studio-Lösung "zlibvc.sln" im Verzeichnis "contrib/vstudio/vc10" als mögliche Abhilfe zu erstellen. Es scheint Release, ReleaseWithoutAsm und Debug-Konfigurationen für alle drei Ziele zu geben: Win32 (x86), x64 und Itanium. Oh, und es gibt auch die Nmake-Datei namens "Makefile.msc" im Verzeichnis "win32", die Sie über die Visual Studio-Eingabeaufforderung erstellen können. –

+0

Sie können eine vorkompilierte Version von zlib herunterladen. Nur für den Fall. – usr1234567

Antwort

9

Nach https://wiki.apache.org/httpd/Win64Compilation ein sehr ähnlichen Fehler bedeuten:

This means you have a typo in either -DASMV -DASMINF or your OBJ="inffasx64.obj gvmat64.obj inffas8664.obj" since inflate_fast is defined in inffas8664.c.


ich in der Lage war erfolgreich mit einem einfach zu bauen:

mkdir C:\Builds\zlib; cd C:\Builds\zlib 
cmake -G "Visual Studio 12 2013" -A x64 D:\Downloads\zlib-1.2.8\ 
cmake --build . 

ich an meinem Cmake Cache sah und ich sehe, dass AMD64 ist auf false gesetzt, anders als das, was dein Cmake-GUI-Fenster anzeigt. Wenn ich es auf "true" setze, entstehen für mich alle Arten von Build-Fehlern, allerdings nicht die, die du zeigst.

CMakeLists.txt besagt, dass diese Option eine AMD64-Assembly-Implementierung aktivieren soll. Einfach zu verzichten, scheint die einfachste Lösung zu sein.

+1

Die Überprüfung von AMD64 scheint zu funktionieren. Ich hatte den Eindruck, dass dies überprüft werden musste, um 64-Bit zu bauen. – elveatles

+2

@elveatles Bei CMake ist die Angabe von 64-Bit-Builds generatorspezifisch und sollte nicht vom Projekt abhängig sein. (AMD64 ist keine der eingebauten Cmake-Variablen, das ist für das zlib-Projekt üblich); Mit dem Visual Studio Generator setzen Sie die Plattform auf x64 mit '-A x64'. Mit Ninja konfigurieren Sie einfach die Shell, von der Sie Cmake ausführen, mit einer 64-Bit-Werkzeugkette. Z.B. Führen Sie CMake -G Ninja von der Visual Studio 64-Bit-Befehlszeile aus. – bames53

6

Sie benötigen contrib \ masmx64 \ inffas8664.c in Visual Studio-Projektdatei enthalten. Diese Datei enthält inflate_fast Funktion, die entsprechende asm Funktionen aufruft.

+0

Wissen Sie, warum es nicht standardmäßig enthalten ist? – McLeary

+2

Ich habe keine Ahnung. Aber "contrib" bedeutet, dass es nicht von zlib Autor gepflegt wird, denke ich. –