png库结合zlib库使用出现的一个链接问题的解决
2015-06-11 19:08
423 查看
作者:朱金灿
来源:http://blog.csdn.net/clever101
要使用png库,首先得编译png库,要编译png库,得依赖zlib库的头文件。在使用png库读取一个png文件时,代码如下:
编译时出现错误:
1>libpngd.lib(png.obj): error LNK2019: 无法解析的外部符号 _crc32@12,该符号在函数 _png_reset_crc 中被引用
1> libpngd.lib(png.obj) : error LNK2019: 无法解析的外部符号 _inflateReset@4,该符号在函数 _png_reset_zstream 中被引用
开始以为是缺少引用zlib库的问题。在附加库目录上添加zlib库,依然有这个链接错误。看来是zlib库编译得有问题。搜索了资料,网上的一种做法是:
解决思路:
zlib.h头文件,定义了zlib库的导出函数原型,如:ZEXTERN intZEXPORT deflateEnd OF((z_streamp strm));
注意红色的ZEXPORT ,其原型在zconf.h文件里面定义:
看到了吗,默认的ZEXPORT宏,只是个空符号罢了,而实际是其应该表示函数的调用方式。
解决方法:
在zconf.h文件将ZEXPORT宏的定义改成下面的形式即可:
我试过这种做法并不正确,导致一大堆编译错误。正确的做法是在zlib的makefile文件(该文件在zlib的源码目录下的win32目录下Makefile.msc)添加预处理器ZLIB_WINAPI,具体是将:
WFLAGS = -D_CRT_SECURE_NO_DEPRECATE-D_CRT_NONSTDC_NO_DEPRECATE一行改为
WFLAGS = -D_CRT_SECURE_NO_DEPRECATE-D_CRT_NONSTDC_NO_DEPRECATE -DZLIB_WINAPI
然后在编译libpng库时也加入ZLIB_WINAPI这个预处理器。
参考文献:
1. error LNK2019: 无法解析的外部符号 _deflate
2.关于zlib的配置
来源:http://blog.csdn.net/clever101
要使用png库,首先得编译png库,要编译png库,得依赖zlib库的头文件。在使用png库读取一个png文件时,代码如下:
#include <stdio.h> #include "png.h" // libpng 库的一个重要头文件 int TestPng() { int is_png; //是否为png char cbHeader[8]; //文件头 FILE *fp = fopen( "D:\\DownLoad\\(7845C4038415)\\1.png", "rb" ); if( !fp ) { puts( "文件打开错误!" ); return 0; } fread( cbHeader, 1, 8, fp ); //从文件中读取文件头 is_png = png_sig_cmp( (png_byte*)cbHeader, 0, 8 ); //检测该文件头是否为png 格式的图片 is_png == 0 ? puts( "是png" ) : puts( "不是png" ); return 0; }
编译时出现错误:
1>libpngd.lib(png.obj): error LNK2019: 无法解析的外部符号 _crc32@12,该符号在函数 _png_reset_crc 中被引用
1> libpngd.lib(png.obj) : error LNK2019: 无法解析的外部符号 _inflateReset@4,该符号在函数 _png_reset_zstream 中被引用
开始以为是缺少引用zlib库的问题。在附加库目录上添加zlib库,依然有这个链接错误。看来是zlib库编译得有问题。搜索了资料,网上的一种做法是:
解决思路:
zlib.h头文件,定义了zlib库的导出函数原型,如:ZEXTERN intZEXPORT deflateEnd OF((z_streamp strm));
注意红色的ZEXPORT ,其原型在zconf.h文件里面定义:
#ifndef ZEXPORT # define ZEXPORT #endif
看到了吗,默认的ZEXPORT宏,只是个空符号罢了,而实际是其应该表示函数的调用方式。
解决方法:
在zconf.h文件将ZEXPORT宏的定义改成下面的形式即可:
#ifndef ZEXPORT # define ZEXPORT WINAPI #endif
我试过这种做法并不正确,导致一大堆编译错误。正确的做法是在zlib的makefile文件(该文件在zlib的源码目录下的win32目录下Makefile.msc)添加预处理器ZLIB_WINAPI,具体是将:
WFLAGS = -D_CRT_SECURE_NO_DEPRECATE-D_CRT_NONSTDC_NO_DEPRECATE一行改为
WFLAGS = -D_CRT_SECURE_NO_DEPRECATE-D_CRT_NONSTDC_NO_DEPRECATE -DZLIB_WINAPI
然后在编译libpng库时也加入ZLIB_WINAPI这个预处理器。
参考文献:
1. error LNK2019: 无法解析的外部符号 _deflate
2.关于zlib的配置
相关文章推荐
- 写给哪些大学不好好读书,出来摆地摊炒鱿鱼创业的学渣们
- png库结合zlib库使用出现的一个链接问题的解决
- 切割图像(五)主动轮廓模型Snake简要模型
- 低水平博士是提升科研生涯的毒药
- C++ 三大函数该写就要写
- Windows上配置python的环境变量
- 20135129李畅宇实验三
- WPF MVVM 关闭View
- Android颜色透明度
- C#中excel导入sql
- require(),include(),require_once()和include_once()区别
- open阶段的一致性检验(二)
- Contrail中包的类型
- [html]事件处理addEventListener详解
- lua--函数之多重返回值
- Android学习 4 -> 布局结构的学习
- mybatis作if判断注意
- linux软件卸载
- codevs 1074食物链 并查集
- 指针数组的应用