2015-04-08 25 views
7

Sto cercando di creare zlib 1.2.8 per Windows usando CMake, ma ottengo errori di compilazione che non so come risolvere. Ecco la mia GUI CMake:CMake zlib build su Windows

enter image description here

Questo genera senza errori, ma quando ho costruire la soluzione risultante. Ho ricevuto questo errore:

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

Non so come posso risolvere questo problema, quindi apprezzo qualsiasi aiuto.

+1

Guardando il file CMakeLists.txt, non sono sicuro di quale sia il problema con CMake. Potresti provare a creare la soluzione "Visual Studio/zlibvc.sln" nella directory "contrib/vstudio/vc10" come possibile rimedio. Sembra che ci siano versioni Release, ReleaseWithoutAsm e Debug per tutti e tre i target: Win32 (x86), x64 e Itanium. Oh, e c'è anche il file Nmake chiamato "Makefile.msc" nella directory "win32" che puoi compilare dal prompt dei comandi di Visual Studio. –

+0

È possibile scaricare una versione precompilata di zlib. Nel caso in cui. – usr1234567

risposta

9

Secondo https://wiki.apache.org/httpd/Win64Compilation un errore molto simile significa:

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.


sono stato in grado di costruire con successo con un semplice:

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

ho guardato il mio nascondiglio CMake e vedo che AMD64 è impostato su falso, a differenza di ciò che mostra la tua finestra cmake-gui. Impostandolo su true, mi risultano tutti i tipi di errori di compilazione per me, anche se non quelli che mostri.

CMakeLists.txt indica che questa opzione consente l'implementazione di un assembly AMD64. Farlo senza sembra essere la soluzione più semplice.

+1

Deselezionare AMD64 sembra funzionare. Ho avuto l'impressione che questo doveva essere controllato per costruire 64-bit. – elveatles

+2

@elveatles Con CMake il modo per specificare i build a 64 bit è specifico del generatore e non dovrebbe dipendere dal progetto. (AMD64 non è una delle variabili cmake "built-in", è custom per il progetto zlib); con il generatore di Visual Studio hai impostato la piattaforma su x64 con '-A x64'. Con Ninja basta configurare la shell con cui si esegue cmake con una catena di strumenti a 64 bit. Per esempio. eseguire CMake -G Ninja dalla riga di comando di Visual Studio a 64 bit. – bames53

6

È necessario contrib \ masmx64 \ inffas8664.c incluso nel file di progetto dello studio visivo. Questo file contiene la funzione inflate_fast che chiama le corrispondenti funzioni asm.

+0

Sai perché non è incluso di default? – McLeary

+2

Non ne ho idea. Ma "contrib" significa che non è gestito dall'autore di zlib, penso. –