png库结合zlib库使用出现的一个链接问题的解决
作者:朱金灿
来源:http://blog.csdn.net/clever101
要使用png库,首先得编译png库,要编译png库,得依赖zlib库的头文件。在使用png库读取一个png文件时,代码如下:
#include <stdio.h>
#include "png.h" // libpng 库的一个重要头文件int TestPng(){int is_png; //是否为pngchar 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的配置
转载于:https://www.cnblogs.com/lanzhi/p/6470094.html
png库结合zlib库使用出现的一个链接问题的解决相关推荐
- linux上安装libpng库以及zlib库
hello ,大家好,我是jordy,一只空着的杯子:欢迎各位朋友光临我的博客,多多沟通 ,我的QQ : 1760282809 363232564 http://blog.csdn.net/baw ...
- [原]从一个链接错误探究GCC的链接库顺序
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用CodeBlocks10.05编一个小程序用到了png库和zlib库.我发现编译png静态库时,只需要指定zlib ...
- 使用zlib库进行数据压缩
http://blog.chinaunix.net/uid-14121858-id-216337.html 使用zlib库进行数据压缩 什么是zlib? 官网上有如下说明,自己看吧 zlib is d ...
- python2.7中没有zlib库的解决方案(zipimport.ZipImportError: can't decompress data; zlib not available)
今天遇到个问题,自己安装的python2.7在/opt目录下,运行起来后,发现使用zlib库出错,网上查找后,获得答案 错误提示: zipimport.ZipImportError: can't de ...
- 使用zlib库实现gzip格式压缩
在产品设备上没有gzip压缩命令,但有zlib库,可以根据zlib库很方便的实现gzip压缩.下载zlib的源码,在test目录下面有几个测试程序,根据这几个测试程序基本可以写出想要的程序了.如下是一 ...
- zlib库删除后的恢复
不小心删除了zlib库的下场(rpm -e zlib*) 错误提示: errorwhile loading shared libraries: libz.so.1: cannot open share ...
- 心得 ~ 使用 zlib库 解压缩 zip文件
最近在完成一个项目,需要用到C++语言读取一个zip文件内指定文件的内容.在网上查阅了不少资料,针对过程中遇到的问题,自己也研究了一下,现将方法心得记录下来. 关于解压文件的方法,根据网上的资料,大概 ...
- zlib库使用简单讲解
1.zlib库简介 zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性(integrity).zlib 也支持读写 gzip (.gz) 格式的文 ...
- zlib库介绍一:zlib简介
目录 1.库简介 2.算法 3.计算资源 4.数据长度 5.业界使用 1.库简介 zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数,能检测解压出来的数据完整性,由Jea ...
最新文章
- php 数字变量,php入门变量之数字_PHP教程
- ORACLE 动态SQL中的多个单引号
- 安装NodeJs运行环境
- Objective-C中class、Category、Block的介绍
- linux系统proc目录,快速了解Linux系统下的proc目录
- Tomcat端口冲突
- Win2003 运行 命令行 快捷操作
- 结对项目--wordCount
- Django admin美化插件suit
- samba for linux下载,Samba 4.4.3 SMB for Linux 发布下载
- linux系统一键安装php运行环境apache,mysql等
- 企业便携计算机,丢失、被盗如何远程将设备还原为出厂默认设置删除所有数据
- 英文PDF免费翻译成中文小方法!!!
- android 图标 自定义,巧用 Drawable 之实现一个最简单的自定义电池图标
- python爬斗鱼直播数据图片_最美小编带你Python爬虫实现获取斗鱼主播信息
- POJ 2706 Connect
- 关于物料的计划页签的 固定提前期和变动提前期的问题
- idea 打包报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (defau
- K2 BPM_K2签约龙光地产,为集团实现“千亿目标”保驾护航_全球领先的工作流引擎...
- HTML中通过js 自定义一个鼠标悬停后立刻显示的Title(附效果图)