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个project。

当中:

   (1). zlibvc生成动态链接库zlibwapi.dll和相应的导入库zlibwapi.lib

   (2). zlibstat生成静态链接库zlibstat.lib

   (3). testzlibdll測试生成的动态链接库zlibwapi.dll

   (4). testzlib測试生成的静态链接库zlibstat.lib        

   最后我们在debug模式下编译整个解决方式。生成的dll和lib文件可在对应的目录中找到。

下边介绍怎样使用编译好的动态或是静态库。(如果项目project已经建立完成)

这里我们把静态库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。

下边介绍怎样使用编译好的静态库。

(如果项目project已经建立完成)

这里我们把静态库 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”(......);正在链接对象。如同没有调试信息一样

这个不影响代码的执行。

编译libpng是一项常见的任务,下面是有关如何完成该任务的步骤。 首先,确保你已经安装了适当的编译工具链,例如GCC或Clang。你还需要安装zlib,因为libpng使用它来进行压缩和解压缩。 其次,从libpng的官方网站或源代码存储下载最新的libpng源代码。将源代码解压到一个适当的目录中。 打开一个终端窗口,在该目录中运行命令行。首先,运行"./configure"命令来生成适合你的系统的Makefile。这个脚本将检查你的系统,并配置编译选项。 运行完configure脚本后,使用"make"命令来编译libpng。这个命令将读取Makefile并开始编译过程。这个过程可能需要一些时间,具体取决于你的系统性能。 当编译完成时,你可以使用"make install"命令将编译好的文件安装到系统目标目录中。这样,你就可以在其他项目中使用libpng了。 编译libpng可能遇到一些问题。例如,如果你的系统缺少必要的依赖项,你可能需要先安装它们。还可能出现一些特定于操作系统的问题,例如缺少特定的头文件或。 在遇到问题时,你可以参考libpng的官方文档或在开发者社区中寻求帮助。他们的网站和邮件列表通常提供关于常见问题和解决方案的信息。 当你成功编译libpng后,你将可以在你的项目中使用它。这个提供了处理PNG图像的功能,例如读取、写入、压缩和解压缩。你可以通过包含相关的头文件和链接该使用这些功能。 在编译过程中要注意版本兼容性,确保使用与你的系统和其他依赖项兼容的libpng版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值