2015-04-08 23 views
7

Tôi đang cố gắng xây dựng zlib 1.2.8 cho Windows bằng CMake, nhưng tôi gặp lỗi xây dựng mà tôi không biết cách khắc phục. Dưới đây là GUI CMake tôi:CMake zlib xây dựng trên Windows

enter image description here

này tạo ra mà không có lỗi, nhưng khi tôi xây dựng các giải pháp kết quả. Tôi gặp lỗi này:

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

Tôi không biết cách khắc phục điều này, vì vậy tôi đánh giá cao mọi trợ giúp.

+1

Nhìn vào tệp CMakeLists.txt, tôi không chắc vấn đề với CMake là gì. Bạn có thể thử xây dựng giải pháp "Visual Studio zlibvc.sln" đã đóng góp trong thư mục "contrib/vstudio/vc10" như một biện pháp khắc phục có thể. Dường như có các cấu hình Release, ReleaseWithoutAsm và Debug cho cả ba mục tiêu: Win32 (x86), x64 và Itanium. Ồ, và cũng có tệp Nmake có tên "Makefile.msc" trong thư mục "win32" mà bạn có thể xây dựng từ Visual Studio Command Prompt. –

+0

Bạn có thể tải xuống phiên bản zlib được biên dịch trước. Chỉ trong trường hợp. – usr1234567

Trả lời

9

Theo https://wiki.apache.org/httpd/Win64Compilation một lỗi rất giống nhau có nghĩa là:

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.


tôi đã có thể xây dựng thành công với một đơn giản:

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

Tôi nhìn bộ nhớ cache cmake của tôi và tôi thấy rằng AMD64 được đặt thành false, không giống như cửa sổ cmake-gui của bạn. Đặt nó thành sự thật nó kết quả tất cả các loại lỗi xây dựng cho tôi, mặc dù không phải là những gì bạn hiển thị.

CMakeLists.txt cho biết tùy chọn này là để cho phép triển khai lắp ráp AMD64. Chỉ cần làm mà không có điều này có vẻ là giải pháp dễ nhất.

+1

Bỏ chọn AMD64 có vẻ hoạt động. Tôi đã ấn tượng rằng điều này phải được kiểm tra để xây dựng 64-bit. – elveatles

+2

@elveatles Với CMake, cách thức để chỉ định các bản dựng 64 bit là máy phát cụ thể và không nên phụ thuộc vào dự án. (AMD64 không phải là một trong các biến cmake 'tích hợp sẵn', nó tùy chỉnh cho dự án zlib); với trình tạo Visual Studio bạn đặt nền tảng thành x64 bằng '-A x64'. Với Ninja bạn chỉ cần cấu hình shell bạn chạy cmake từ với một chuỗi công cụ 64-bit. Ví dụ. chạy CMake -G Ninja từ dòng lệnh Visual Studio 64-bit. – bames53

6

Bạn cần contrib \ masmx64 \ inffas8664.c được bao gồm trong tệp dự án studio trực quan. Tệp này chứa hàm inflate_fast gọi hàm asm tương ứng.

+0

Bạn có biết tại sao nó không được bao gồm theo mặc định? – McLeary

+2

Tôi không biết. Nhưng 'contrib' có nghĩa là nó không được duy trì bởi tác giả zlib, tôi nghĩ vậy. –

Các vấn đề liên quan