在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,不一致也可能导致以上错误。

编译即通过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值