博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
png库结合zlib库使用出现的一个链接问题的解决
阅读量:6969 次
发布时间:2019-06-27

本文共 1433 字,大约阅读时间需要 4 分钟。

作者:朱金灿

来源:

 

           要使用png库,首先得编译png库,要编译png库,得依赖zlib库的头文件。在使用png库读取一个png文件时,代码如下:

#include 
#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.

 

2.

转载于:https://www.cnblogs.com/lanzhi/p/6470094.html

你可能感兴趣的文章
dataframe 合并(append, merge, concat)
查看>>
几种常用网络传输协议
查看>>
Http请求头和响应头
查看>>
画鬼最易
查看>>
如何恢复Windows“消失”的磁盘分区
查看>>
从工作流产品想到软件开发过程
查看>>
发布一个WM文件浏览器--foxBrowser (Specialized for SmartPhone)
查看>>
色拉英语第3集第3幕:Bottoms up
查看>>
sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探
查看>>
chrome 一进入调试页面就会自己主动打断点
查看>>
js设置和获取cookie的函数
查看>>
iOS解析Server端返回JSON数据
查看>>
〖Fedora〗设置Fedora静态ip地址
查看>>
php性能分析工具xhprof
查看>>
mysql开启慢查询方法(转)
查看>>
图片水平居中显示实验
查看>>
开源项目地址
查看>>
现代软件工程 第十四章 【质量保障】 练习与讨论
查看>>
字符设备驱动3:驱动代码与文件系统中的设备信息的关系
查看>>
C#的TextBox获取行高
查看>>