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