2015-10-28 27 views
5

Tôi không thể, vì tình yêu của Thiên Chúa, để liên kết tĩnh các lib ZLIB. Tôi đã phải vật lộn trong một vài giờ và không thành công. Vâng, tôi đã theo sau này tutorial và thành công biên dịch cả hai zlibstat.lib và zlibwapi.lib cho 32 bit. Sau khi thiết lập dự án của tôi để sử dụng thư mục ZLIB với các thư viện (Linker> General> Thư viện Thư viện Bổ sung) và thiết lập zlibwapi.lib (only) như một phụ thuộc (Linker> Input> Dependencies bổ sung), tôi đã nhận nó là work, tuy nhiên , đó là liên kết động động (Tôi cần phân phối ứng dụng của mình với dll ZLIB). Tôi thường sử dụng liên kết động trên Debug và tĩnh trên Release.Kết nối ZLIB tĩnh (1.2.8) trên Visual Studio 2012

Tôi đã thử tìm kiếm những gì địa ngục là zlibstat.lib và whats nó được sử dụng cho, nếu không cho liên kết tĩnh, giả sử hậu tố "stat".

Có bất kỳ bộ tiền xử lý nào được thêm vào dự án của tôi, giống như ZLIB_STATIC hay gì đó không, để sử dụng liên kết tĩnh của ZLIB hoặc tôi chưa bao giờ xóa ZLIB_WINAPI khỏi dự án zlibstat, giống như liên kết trên đã yêu cầu tôi thực hiện? Là nó không thể liên kết tĩnh ZLIB (sau đó, whats zlibstat.lib cho?)?

Tôi khá lạc mất. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

Chỉnh sửa (Giảm thông tin):

Lỗi:

error LNK2001: unresolved external symbol [email protected] 
error LNK2001: unresolved external symbol [email protected] 
error LNK2001: unresolved external symbol [email protected] 

Liên kết:

Không giống như các liên kết động (mà làm việc), nơi tôi đã thêm zlibwapi.lib như một sự phụ thuộc, cho các liên kết tĩnh Tôi đang cố gắng để đạt được tôi thêm zlibstat.lib như là một phụ thuộc thay thế! Không có libs nào khác được thêm vào!

Câu hỏi này có thể trông giống như this (loại).

Trả lời

3

Tôi cuối cùng cũng đã giải quyết được vấn đề của mình. Đối với những người kết thúc trong một vấn đề như vậy, heres cách giải quyết:

Nếu bạn làm theo hướng dẫn trong bài đăng đầu tiên của mình, bạn đã xóa ZLIB_WINAPI từ Pre2. Tuy nhiên, sau khi thiết lập dự án của riêng tôi (thiết lập đường dẫn phụ thuộc ZLIB, thư viện phụ thuộc LIB, vv) sử dụng ZLIB, tôi 'vô tình' bao gồm/xác định macro ZLIB_WINAPI bị chết trong tệp tiêu đề tôi đang sử dụng ZLIB, ngay trước khi bao gồm "zlib. h ". Một điều tò mò về điều này là khi khởi chạy ứng dụng trên chế độ gỡ lỗi (được sử dụng liên kết động), mọi thứ đã thành công và hoạt động như một nét duyên dáng, không có cảnh báo hoặc bất cứ điều gì, HÃY BAO GIỜ, ở chế độ phát hành (đang sử dụng liên kết tĩnh), nó bị hỏng.

Vì vậy, để xóa mọi thứ lên, hướng dẫn cho chúng ta biết để tháo ZLIB_WINAPI Preprocessor từ dự án zlibstat, trong đó sản xuất các lib tĩnh, trong khi các dự án zlibvc ZLIB_WINAPI trong tiền xử lý của nó. Nói cách khác, điều đó có nghĩa là nếu chúng tôi đang sử dụng các liên kết khác nhau cho mỗi cấu hình (gỡ lỗi/phát hành), chúng ta phải thêm macro ZLIB_WINAPI hay không!

Xác định macro ZLIB_WINAPI trước khi bao gồm "zlib.h" nếu bạn đang sử dụng liên kết động (zlibwapi).lib) và rằng dự án zlibvc vẫn chưa được sửa đổi (giả sử bạn đã theo đúng hướng dẫn từ liên kết ở trên) và không xác định nó nếu bạn xóa ZLIB_WINAPI từ dự án zlibstat (như hướng dẫn cho chúng tôi biết)!

Một vĩ mô hữu ích tôi đã sử dụng trong dự án của riêng tôi là như sau:

// Since we used dynamic linking for debug, we have to define the ZLIB_WINAPI 
#if defined(_WIN32) && defined(_DEBUG) 
    #define ZLIB_WINAPI 
#endif 
#include <zlib.h> 

Mọi thứ đã thực sự bối rối và tôi thực sự hy vọng tôi đã đủ rõ ràng.

+0

Bạn có thể giải thích rõ ràng hơn về các bước cần làm để liên kết Zlib tĩnh không. Tôi có cùng một vấn đề. Cảm ơn – DevAndroid

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