2015-04-08 3 views
7

Я пытаюсь создать zlib 1.2.8 для Windows с помощью CMake, но я получаю ошибки сборки, которые я не знаю, как исправить. Вот мой CMake GUI:CMake zlib build на Windows

enter image description here

Это порождает без ошибок, но когда я построю полученный раствор. Я получаю эту ошибку:

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

Я не знаю, как я могу это исправить, поэтому я ценю любую помощь.

+1

Глядя на файл CMakeLists.txt, я не уверен, что проблема с CMake здесь. Вы можете попытаться создать предоставленное «zlibvc.sln» решение Visual Studio в каталоге «contrib/vstudio/vc10» в качестве возможного средства защиты. Похоже, что для всех трех целей есть версии Release, ReleaseWithoutAsm и Debug: Win32 (x86), x64 и Itanium. О, и есть файл Nmake с именем «Makefile.msc» в каталоге «win32», который вы можете создать из командной строки Visual Studio. –

+0

Вы можете загрузить предварительно скомпилированную версию zlib. На всякий случай. – usr1234567

ответ

9

Согласно https://wiki.apache.org/httpd/Win64Compilation очень подобная ошибка означает:

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.


Я был в состоянии успешно строить с простой:

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

Я посмотрел на кэш CMake, и я вижу, что В AMD64 установлено значение false, в отличие от того, что показывает ваше окно cmake-gui. Установив его в true, он вызывает для меня всевозможные ошибки сборки, но не те, которые вы показываете.

CMakeLists.txt говорит, что эта опция предназначена для включения сборки сборки AMD64. Просто без этого, кажется, самое простое решение.

+1

Сброс AMD64, похоже, сработает. У меня создалось впечатление, что это нужно было проверить, чтобы построить 64-битный. – elveatles

+2

@elveatles С помощью CMake способ указать 64-битные сборки является генератором специфическим и не должен зависеть от проекта. (AMD64 не является одной из «встроенных» cmake-переменных, это обычай для проекта zlib); с генератором Visual Studio вы установите платформу на x64 с '-A x64'. С Ninja вы просто настраиваете оболочку, с которой вы запускаете cmake, с помощью 64-битной цепочки инструментов. Например. запустить CMake -G Ninja из 64-разрядной командной строки Visual Studio. – bames53

6

Вам необходимо contrib \ masmx64 \ inffas8664.c Включено в файл проекта визуальной студии. Этот файл содержит функцию inflate_fast, которая вызывает соответствующие функции asm.

+0

Знаете ли вы, почему он не включен по умолчанию? – McLeary

+2

Я понятия не имею. Но «contrib» означает, что он не поддерживается zlib автором, я думаю. –

Смежные вопросы