Windows下zlib库和libPng库的编译和使用
关于zlib库和libpng是干嘛的,我就不说了,度娘和谷歌都能告诉你。这里主要记录下windows下如何利用vs2010编译和使用这两个库。
一、zlib库的编译
首先要下载这个库,这个谷歌和百度也都可以找得到的。我下载的是zlib-1.2.5,下载完解压出来即可。下边就开始编译吧。(包括动态库和静态库两种)
1. 首先开启VS2010的Command Prompt (32bit),也就是命令提示窗口。
2. 进入到zlib-1.2.5/contrib/masmx86目录,执行bld_ml32.bat。(同理,64位的电脑进入masmx64目录,执行bld_ml64.bat)。这一步运行bld_ml32批处理文件,里面调用ml命令编译inffas32.asm和match686.asm,生成inffas32.obj和match686.obj(生成在本目录下)。这两个文件在zlibvc中用到。
3. zlib的vs sln解决方案文件可以在如下路径中找到:zlib-1.2.5/contrib/vstudio/vc10/zlibvc.sln,打开
这个解决方案中包含6个工程。其中:
(1). zlibvc生成动态链接库zlibwapi.dll和对应的导入库zlibwapi.lib
(2). zlibstat生成静态链接库zlibstat.lib
(3). testzlibdll测试生成的动态链接库zlibwapi.dll
(4). testzlib测试生成的静态链接库zlibstat.lib
最后我们在debug模式下编译整个解决方案。生成的dll和lib文件可在相应的文件夹中找到。
下边介绍如何使用编译好的动态或是静态库。(假设项目工程已经建立完毕)
这里我们把静态库zlibstat.lib和动态库(zlibwapi.dll/zlibwapi.lib)以及zlib.h/zlibconf.h文件放在一个文件夹中。
二、使用zlib静态库:zlibstat.lib
1. 包含头文件
属性--C/C++--常规--附加包含目录(添加包含.h文件的目录)
2. 定义宏
属性--C/C++--预处理器--预处理器定义:添加 ZLIB_WINAPI ASMV ASMINF
3. 项目包含.lib文件所在的目录:
属性--链接器--常规--附加库目录
4. 项目包含.lib文件
属性--链接器--输入--附加依赖项(libstat.lib)
5. 项目代码中 #include "zlib.h"
编译生成.exe即可使用。
三、使用动态库 zlibwapi.lib
1. 包含头文件
属性--C/C++--常规--附加包含目录(添加包含.h的目录)
2. 定义宏
属性--C/C++--预处理器--预处理器定义:添加 ZLIB_WINAPI
3. 项目包含.lib文件所在的目录:
属性--链接器--常规--附加库目录
4. 项目包含.lib文件
属性--链接器--输入--附加依赖项(zlibwapi.lib)
5. 项目代码中 #include "zlib.h"
编译生成.exe文件需要.dll文件支持(动态加载)
四、libpng的编译
1. 首先要下载这个库,我下载的是 libpng-1.2.37,解压。
2. 这个的解决方案在 libpng-1.2.37/projects/visualc71中,打开 libpng.sln。用vs2010打开可能需要转换,点击下一步进行转换即可。
3. 不要急着编译。首先分析这个解决方案:
这个解决方案的libpng项目默认是采用的动态库(.dll)编译的(属性--配置属性--常规--项目默认类型)。我们可以直接编译静态库,生成.dll文件和.lib文件。在编译的时候,可能会出错,反正就是各种错误,不是缺少这个就是缺少那个的,很烦人,这里我本来就是想编译静态类型的,所以也就没在研究这个。下边改为静态类型编译,这里有点麻烦,别着急。
4. 静态编译需要宏定义,我们首先打开项目属性--配置属性--C/C++--预处理器定义,这里我们看到动态编译时定义的一些宏。这里有两个对我们有用:PNG_BUILD_DLL 和 ZLIB_DLL。
5. 在整个解决方案中查找PNG_BUILD_DLL,我们可以在pngconf.h文件中看到下边一段代码:
Normal' png-on-win32 defines/defaults:
PNG_BUILD_DLL -- building dll
PNG_USE_DLL -- building an application, linking to dll
(no define) -- building static library, or building an
application and linking to the static lib
这里可以很明显的看出,如果我们需要编译静态库,则需要 no define.所以我们删除 PNG_BUILD_DLL 宏定义。
6. 在整个解决方案中查找 ZLIB_DLL,我们会找到下边一句话:
If building or using zlib as a DLL, define ZLIB_DLL
这里只是告诉我们,如果我们把zlib作为dll使用,则定义ZLIB_DLL。但是我们这里不希望这么做,所以继续分析。下边还有几句话:
If building or using zlib with the WINAPI/WINAPIV calling convention,
define ZLIB_WINAPI.
Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
这段英文看的不是特别懂,但是能知道,我们定义ZLIB_WINAPI即可。这个我们在上边的zlib静态库的编译中也用到了,所以,应该就是这么定义了。我们在“预处理器定义”中删除ZLIB_DLL,改为 ZLIB_WINAPI。
7. 宏定义完了,还需要最关键的一步,我们在 属性--配置属性--常规--项目默认类型中更改为“静态库(.lib)。编译选项改为LIB Debug。编译生成即可。生成的文件为libpngd.lib。
下边介绍如何使用编译好的静态库。(假设项目工程已经建立完毕)
这里我们把静态库 libpngd.lib 和 png.h/pngconf.h 文件放在一个文件夹中。
五、libpng静态库(libpngd.lib)的使用。
1. 包含头文件
属性--C/C++--常规--附加包含目录(添加包含.h文件的目录)
2. 定义宏
这里因为要用到zlib库,所以只要定义ZLIB_WINAPI即可
3. 项目包含.lib文件所在的目录:
属性--链接器--常规--附加库目录
4. 项目包含.lib文件
属性--链接器--输入--附加依赖项(libpngd.lib)
5. 项目代码中 #include "png.h"
编译生成.exe即可使用。
注:在编译的时候,可能会出现以下警告:
warning LNK4099: 未找到 PDB“vc100.pdb”(......);正在链接对象,如同没有调试信息一样
这个不影响代码的运行。
参考 :
Windows下zlib库和libPng库的编译和使用的更多相关文章
- Windows下如何使用BOOST C++库 .
Windows下如何使用BOOST C++库 我采用的是VC8.0和boost_1_35_0.自己重新编译boost当然可以,但是我使用了 http://www.boostpro.com/produc ...
- OpenGL学习之windows下安装opengl的glut库
OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows环境下的GLUT下载地址:(大小约为15 ...
- [爬虫]Windows下如何安装python第三方库lxml
lxml是个非常有用的python库,它可以灵活高效地解析xml与BeautifulSoup.requests结合,是编写爬虫的标准姿势. 但是,当lxml遇上Windows,简直是个巨坑.掉在安装陷 ...
- Windows下如何安装python第三方库lxml
lxml是个非常有用的python库,它可以灵活高效地解析xml,与BeautifulSoup.requests结合,是编写爬虫的标准姿势. 参考 Windows下如何安装python第三方库lxml ...
- Windows下安装PCL点云库
原文链接:http://blog.csdn.net/u012337034/article/details/38270109 简介: 在Windows下安装PCL点云库的方法大概有两种: ...
- Python调用windows下DLL详解 - ctypes库的使用
在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互.使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详 ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- yate: windows下源码下载,配置,编译
源码下载:使用svn下载checkout:http://voip.null.ro/svn/yate/trunk 配置:(本人使用的是vs2008,故下载的qt工具都是对应2008) 1. 下载并安装q ...
- 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...
随机推荐
- redmine后台运行命令
nohup ruby script/rails server webrick -e production & redmine 3 后台运行命令: nohup bundle exec rail ...
- Python多个版本安装!
Python可以同时安装多个版本,目前我安装的是3.6和3.5,在Eclipse中使用3.6:在Visual Studio中使用3.5.如何让哪个版本的Python成为系统默认的解释器呢?通过调整不同 ...
- 安装程序无法复制文件 convlog.exe的解决方法
在安装的时候出现一个错误提示“安装程序无法复制文件CONVLOG.EX_”,上网找了很多资料,都说是因为版本问题,考虑到自己的服务器安装的是2003 SP1,后来打了补丁到SP2的,也就认为是版本问题 ...
- [SQL]SQL类似统计功能的sql文
declare @t table(name varchar(),type int) insert into @t union all union all union all union all if ...
- ReverseBits
eclipse没问题,leetcode 1不能通过,超出int最大值了,但是怎么转无符号? /*Write a function that takes an unsigned integer and ...
- java中的static变量
java中的static变量 例如 public static int num=0: num+=1;放在函数里面 调用一次变动一次.
- jxl的API
jxl的API 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Exce ...
- H264-AVS POC理解
H264码流的输出顺序是编码顺序,所以在编码B帧的时候,由于B是双向预测,需要先编码后面编码帧P/I,这时候先输出I/P,后面才有B帧. 在解码段拿到相应的I/P帧后,不能马上丢到buffer lis ...
- ASP.NET MVC 之 View 测试
项目又出问题了!手贱了一下,使用某个工具整理了一下 View 中的内容,不经意之间,将 View 的输出中大小写不小心搞错了,导致输出的内容没有办法正常解析. 这种问题太隐蔽了,下次再遇到怎么办呢? ...
- contentSize、contentInset和contentOffset的区分
一. frame.bounds和center的区分 frame:由左边原点和矩形面积组成,其中原点代表其在父视图中的起点位置. bounds:就是原点始终为(0,0)的frame. center:本 ...