2015-04-08 18 views
7

Próbuję zbudować zlib 1.2.8 dla Windows za pomocą CMake, ale dostaję błędy kompilacji, których nie wiem jak naprawić. Oto mój CUpewnij GUI:CMake zlib kompilacja na Windows

enter image description here

Generuje bez błędów, ale kiedy budować otrzymanego roztworu. Otrzymuję ten błąd:

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

Nie wiem, jak to naprawić, dlatego doceniam każdą pomoc.

+1

Patrząc na plik CMakeLists.txt, nie jestem pewien, co jest problem z CMake jest tutaj. Możesz spróbować wbudować dostarczone rozwiązanie "zlibvc.sln" Visual Studio w katalogu "contrib/vstudio/v10" jako możliwe rozwiązanie. Wygląda na to, że istnieją wersje Release, ReleaseWithoutAsm i Debug dla wszystkich trzech celów: Win32 (x86), x64 i Itanium. Aha, jest też plik Nmake o nazwie "Makefile.msc" w katalogu "win32", który można zbudować z wiersza poleceń programu Visual Studio. –

+0

Możesz pobrać wstępnie skompilowaną wersję ZliB. W razie czego. – usr1234567

Odpowiedz

9

Według https://wiki.apache.org/httpd/Win64Compilation bardzo podobny błąd oznacza:

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.


byłem w stanie skutecznie budować z prosta:

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

Spojrzałem na cmake cache i widzę, że AMD64 jest ustawione na false, w przeciwieństwie do tego, co pokazuje twoje okno cmake-gui. Ustawienie wartości true powoduje, że wszystkie rodzaje błędów kompilacji są dla mnie, ale nie te, które wyświetlasz.

CMakeLists.txt mówi, że ta opcja służy do włączenia implementacji złożenia AMD64. Po prostu bez tego wydaje się najłatwiejszym rozwiązaniem.

+1

Odznaczenie AMD64 wydaje się działać. Miałem wrażenie, że trzeba to sprawdzić, żeby zbudować 64-bit. – elveatles

+2

@elveatles Dzięki CMake sposób określania wersji 64-bitowych jest zależny od generatora i nie powinien zależeć od projektu. (AMD64 nie jest jedną z "wbudowanych" zmiennych cmake, jest niestandardowe dla projektu zlib); z generatorem Visual Studio ustawiasz platformę na x64 z '-A x64'. Z Ninja po prostu skonfiguruj powłokę, na której uruchomisz cmake z za pomocą 64-bitowego łańcucha narzędzi. Na przykład. uruchom CMake -G Ninja z 64-bitowego wiersza poleceń Visual Studio. – bames53

6

Potrzebujesz: contrib \ masmx64 \ inffas8664.c zawarte w pliku projektu studyjnego. Plik zawiera funkcję inflate_fast, która wywołuje odpowiednie funkcje asm.

+0

Czy wiesz, dlaczego nie jest on domyślnie włączony? – McLeary

+2

Nie mam pojęcia. Ale "contrib" oznacza, że ​​nie jest on utrzymywany przez autora zlib, jak sądzę. –