在Windows平台下利用VC++下编译png库和zlib库

 

源代码包为: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,不一致也可能导致以上错误。

编译即通过。

你可能感兴趣的:(Windows应用编程)