作者:朱金灿

来源: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库使用出现的一个链接问题的解决相关推荐

  1. linux上安装libpng库以及zlib库

    hello ,大家好,我是jordy,一只空着的杯子:欢迎各位朋友光临我的博客,多多沟通 ,我的QQ :   1760282809 363232564 http://blog.csdn.net/baw ...

  2. [原]从一个链接错误探究GCC的链接库顺序

    作者:朱金灿 来源:http://blog.csdn.net/clever101 使用CodeBlocks10.05编一个小程序用到了png库和zlib库.我发现编译png静态库时,只需要指定zlib ...

  3. 使用zlib库进行数据压缩

    http://blog.chinaunix.net/uid-14121858-id-216337.html 使用zlib库进行数据压缩 什么是zlib? 官网上有如下说明,自己看吧 zlib is d ...

  4. python2.7中没有zlib库的解决方案(zipimport.ZipImportError: can't decompress data; zlib not available)

    今天遇到个问题,自己安装的python2.7在/opt目录下,运行起来后,发现使用zlib库出错,网上查找后,获得答案 错误提示: zipimport.ZipImportError: can't de ...

  5. 使用zlib库实现gzip格式压缩

    在产品设备上没有gzip压缩命令,但有zlib库,可以根据zlib库很方便的实现gzip压缩.下载zlib的源码,在test目录下面有几个测试程序,根据这几个测试程序基本可以写出想要的程序了.如下是一 ...

  6. zlib库删除后的恢复

    不小心删除了zlib库的下场(rpm -e zlib*) 错误提示: errorwhile loading shared libraries: libz.so.1: cannot open share ...

  7. 心得 ~ 使用 zlib库 解压缩 zip文件

    最近在完成一个项目,需要用到C++语言读取一个zip文件内指定文件的内容.在网上查阅了不少资料,针对过程中遇到的问题,自己也研究了一下,现将方法心得记录下来. 关于解压文件的方法,根据网上的资料,大概 ...

  8. zlib库使用简单讲解

    1.zlib库简介 zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性(integrity).zlib 也支持读写 gzip (.gz) 格式的文 ...

  9. zlib库介绍一:zlib简介

    目录 1.库简介 2.算法 3.计算资源 4.数据长度 5.业界使用 1.库简介 zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数,能检测解压出来的数据完整性,由Jea ...

最新文章

  1. php 数字变量,php入门变量之数字_PHP教程
  2. ORACLE 动态SQL中的多个单引号
  3. 安装NodeJs运行环境
  4. Objective-C中class、Category、Block的介绍
  5. linux系统proc目录,快速了解Linux系统下的proc目录
  6. Tomcat端口冲突
  7. Win2003 运行 命令行 快捷操作
  8. 结对项目--wordCount
  9. Django admin美化插件suit
  10. samba for linux下载,Samba 4.4.3 SMB for Linux 发布下载
  11. linux系统一键安装php运行环境apache,mysql等
  12. 企业便携计算机,丢失、被盗如何远程将设备还原为出厂默认设置删除所有数据
  13. 英文PDF免费翻译成中文小方法!!!
  14. android 图标 自定义,巧用 Drawable 之实现一个最简单的自定义电池图标
  15. python爬斗鱼直播数据图片_最美小编带你Python爬虫实现获取斗鱼主播信息
  16. POJ 2706 Connect
  17. 关于物料的计划页签的 固定提前期和变动提前期的问题
  18. idea 打包报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (defau
  19. K2 BPM_K2签约龙光地产,为集团实现“千亿目标”保驾护航_全球领先的工作流引擎...
  20. HTML中通过js 自定义一个鼠标悬停后立刻显示的Title(附效果图)

热门文章

  1. JSON.parse()出错解决
  2. 如何用java语法解析接口返回的json串?
  3. 微信、移动端css布局的那些坑
  4. 【C#】第3章学习要点(三)--常用类和结构的用法
  5. OpenJudge/Poj 2001 Shortest Prefixes
  6. SQL Server 的历史与发展方向
  7. 基于SAAS模式的报销管理系统!
  8. SQL Server 2005 Analysis Services
  9. iOS编程(双语版) - 视图 - 基本概念
  10. 助力军事内容持续产出,军武次位面完成B轮融资...