在Windows平台下利用VC++下編譯png庫和zlib庫

來源:互聯網
上載者:User

原始碼包為:libpng-1.2.8, zlib-1.2.5

編譯工具:VS2008

1.       編譯zlib-1.2.5

1.1    錯誤資訊:會出現錯誤為找不到match686.obj與inffas32.obj。

解決辦法:看了一下附加依賴項裡面有

..\..\masmx86\match686.obj

..\..\masmx86\inffas32.obj

這兩項,在相應目錄下找到這兩個檔案match686.asm和inffas32.asm,看了一下這兩個檔案裡的說明,即可編譯:

在開始菜單中開啟Visual Studio 2008命令提示字元,轉到masmx86目錄,執行

ml  /coff /Zi /c /Flinffas32.lst inffas32.asm

產生inffas32.obj檔案

ml /coff /Zi /c /Flmatch686.lst match686.asm

產生match686.obj檔案

 

1.2 出現類似:fatal error C1853 先行編譯標頭檔來自編譯器的早期版本,或者先行編譯頭為 C++ 而在 C 中使用它(或相反)   或者

在尋找先行編譯頭時遇到意外的檔案結尾。是否忘記了向源中添加#include "stdafx.h

 

解決辦法:找到所有的.c源檔案,右鍵點擊屬性,將使用先行編譯頭去掉,不使用先行編譯頭。

 

1.3   測試產生的lib檔案和dll庫。

產生匯出函數時使用是一個def定義檔案匯出函數,但是引用時用到zlib.h標頭檔,需要匯入函數。

在zlib.h的標頭檔中有一個ZEXPORT宏定義,另外還有一個條件編譯宏ZLIB_WINAPI,在項目預先處理屬性中要加上如上條件編譯。在同一工程中,有一個testzlib項目,裡面有所有需要的條件編譯變數,可以直接複製過來。具體為:

ASMV

ASMINF

WIN32

_DEBUG

_CONSOLE

ZLIB_WINAPI

_CRT_NONSTDC_NO_DEPRECATE

_CRT_SECURE_NO_DEPRECATE

_CRT_NONSTDC_NO_WARNINGS

 

2.       將zlib庫引入工具中,加入zlib標頭檔,開始編譯libpng-1.2.8

21. 出現如下錯誤:

1>png.obj : error LNK2019: unresolved external symbol __imp__crc32 referenced in function _png_reset_crc
1>png.obj : error LNK2019: unresolved external symbol __imp__inflateReset referenced in function _png_reset_zstream
1>pngpread.obj : error LNK2001: unresolved external symbol __imp__inflateReset 
1>pngrutil.obj : error LNK2001: unresolved external symbol __imp__inflateReset 
1>pngpread.obj : error LNK2019: unresolved external symbol __imp__inflate referenced in function _png_process_IDAT_data
1>pngread.obj : error LNK2001: unresolved external symbol __imp__inflate 
1>pngrutil.obj : error LNK2001: unresolved external symbol __imp__inflate 
1>pngread.obj : error LNK2019: unresolved external symbol __imp__inflateInit_ referenced in function _png_create_read_struct_2
1>pngread.obj : error LNK2019: unresolved external symbol __imp__inflateEnd referenced in function _png_read_destroy
1>pngwrite.obj : error LNK2019: unresolved external symbol __imp__deflate referenced in function _png_write_flush
1>pngwutil.obj : error LNK2001: unresolved external symbol __imp__deflate 
1>pngwrite.obj : error LNK2019: unresolved external symbol __imp__deflateEnd referenced in function _png_write_destroy
1>pngwutil.obj : error LNK2019: unresolved external symbol __imp__deflateInit2_ referenced in function _png_write_IHDR
1>pngwutil.obj : error LNK2019: unresolved external symbol __imp__deflateReset referenced in function _png_write_compressed_data_out

 

解決辦法:存細看了一下zlib庫的的相應方法,其實是有定義的。並非無法包含的外部符號。只是有一個條件編譯開關。按照上述1.3 的說明,在前置處理器中加入如下內容:

ASMV

ASMINF

WIN32

_DEBUG

_CONSOLE

ZLIB_WINAPI

_CRT_NONSTDC_NO_DEPRECATE

_CRT_SECURE_NO_DEPRECATE

_CRT_NONSTDC_NO_WARNINGS

另外還注意:編譯時間的cpu類型要一致,或者都為win32,不一致也可能導致以上錯誤。

編譯即通過。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: