VC6 下 libpng 库的编译与初步使用(3)

编译运行, 会发现出现了几下如下的错误:

Compiling...
        main.c
        Linking...
        MSVCRT.lib(MSVCRT.dll) : error LNK2005: __snprintf already defined in LIBCD.lib(snprintf.obj)
        MSVCRT.lib(MSVCRT.dll) : error LNK2005: _malloc already defined in LIBCD.lib(dbgheap.obj)
        MSVCRT.lib(MSVCRT.dll) : error LNK2005: _free already defined in LIBCD.lib(dbgheap.obj)
        LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
        Debug/libpng_demo.exe : fatal error LNK1169: one or more multiply defined symbols found
        Error executing link.exe.

libpng_demo.exe - 4 error(s), 1 warning(s)

大致的意思是说 xxx 在 LIBCD.lib 中已经有了定义, 这个比较好解决, 我们选择将 LIBCD.lib 这个库进行忽略即可, 忽略的方式为, 进入工程设置, 找到 Link 选项卡, 在分类(Categor)中选择 输入(Input), 下面有个 忽略库(Ignore libraries), 将 LIBCD.lib 添加进去确定。如果选择Win32 Release 模式, 也会出现这个错误, 不过重复定义的库变成了 LIBC.lib, 同样方式进行忽略即可。

再次编译运行, 错误即消失, 0 error(s), 0 warning(s), 十分惬意。

代码解说:

在上段代码中, 我们运用了 libpng 提供的一个 png_sig_cmp 函数, 该函数的作用是通过文件头检测文件是否为png格式的图片, 对于 png 格式的图片, 文件开头的 8 字节来表示该文件是不是PNG文件(详见png的文件结构), 当 是png时, 函数返回 0。

因此, 在代码中我们定义了 8 个字节的存储空间 char cbHeader[8]; 并且使用标准输入输出函数读取了文件的前8个字节的内容, 将得到的文件头再交给 png_sig_cmp 进行判断。

笔者也是刚接触这个 libpng 库, 对于详细的使用方法还有待研究, 由于官网... 就不说了, 相关的完整资料也不太好找, 不过还是通过.找到了一份完整的文档(pdf, 英文)。

下载地址:

免费下载地址在

用户名与密码都是

具体下载目录在 /2013年资料/8月/12日/VC6 下 libpng 库的编译与初步使用

下载方法见

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/efb8f07b78f051b1a6cf4911ce591339.html