zoukankan      html  css  js  c++  java
  • 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;            //是否为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的配置

  • 相关阅读:
    HDU4507 吉哥系列故事――恨7不成妻(数位dp)
    UCF Local Programming Contest 2017 G题(dp)
    ICPC Latin American Regional Contests 2019 I题
    UCF Local Programming Contest 2017 H题(区间dp)
    HDU2089 不要62
    AcWing1084 数字游戏II(数位dp)
    UCF Local Programming Contest 2017 F题(最短路)
    Google Code Jam 2019 Round 1A Pylons(爆搜+贪心)
    AcWing1083 Windy数(数位dp)
    Vue
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470094.html
Copyright © 2011-2022 走看看