文章目录
一、zlib介绍
zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数。zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数。
zlib能检测解压出来的数据完整性,由Jean-loup Gailly与Mark Adler所开发。最新版本为1.2.12。
zlib初版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。
二、文件下载
zlib网址:
获取zlib-1.2.12.tar.gz文件。
三、文件分析
解压缩zlib-1.2.12文件
文件夹下有CMakeLists.txt文件:
文件中,标识了相应的头文件、库文件,以及预定义项等信息:
关键的预定义项信息:
四、pro文件
考虑到linux、macos下 lseek等函数的调用,修改了gzguts.h文件:
配置头文件:
cpp
#头文件
HEADERS += zconf.h \
zlib.h \
crc32.h \
deflate.h \
gzguts.h \
inffast.h \
inffixed.h \
inflate.h \
inftrees.h \
trees.h \
zutil.h
配置源文件:
cpp
#源文件
SOURCES += adler32.c \
compress.c \
crc32.c \
deflate.c \
gzclose.c \
gzlib.c \
gzread.c \
gzwrite.c \
inflate.c \
infback.c \
inftrees.c \
inffast.c \
trees.c \
uncompr.c \
zutil.c
设置预定义项:
cpp
DEFINES += ZLIB_DLL NO_FSEEKO
DEFINES -= UNICODE
win32 {
DEFINES += _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}
形成002.zlib-1.2.12.pro文件:
cpp
QT += core
TEMPLATE = lib
CONFIG += c++17
DESTDIR = ../QGIS
CONFIG(debug, debug|release){
MOC_DIR = ../build-QGIS/zlib/Debug/moc
RCC_DIR = ../build-QGIS/zlib/Debug/rcc
UI_DIR = ../build-QGIS/zlib/Debug/ui
OBJECTS_DIR = ../build-QGIS/zlib/Debug/obj
}else{
MOC_DIR = ../build-QGIS/zlib/Release/moc
RCC_DIR = ../build-QGIS/zlib/Release/rcc
UI_DIR = ../build-QGIS/zlib/Release/ui
OBJECTS_DIR = ../build-QGIS/zlib/Release/obj
}
CONFIG(debug, debug|release){
TARGET = zlibd
}else{
TARGET = zlib
}
DEFINES += ZLIB_DLL NO_FSEEKO
DEFINES -= UNICODE
win32 {
DEFINES += _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#当前目录
INCLUDEPATH += ./
#头文件
HEADERS += zconf.h \
zlib.h \
crc32.h \
deflate.h \
gzguts.h \
inffast.h \
inffixed.h \
inflate.h \
inftrees.h \
trees.h \
zutil.h
#源文件
SOURCES += adler32.c \
compress.c \
crc32.c \
deflate.c \
gzclose.c \
gzlib.c \
gzread.c \
gzwrite.c \
inflate.c \
infback.c \
inftrees.c \
inffast.c \
trees.c \
uncompr.c \
zutil.c
# Default rules for deployment.
#unix {
# target.path = /usr/lib
#}
#!isEmpty(target.path): INSTALLS += target
五、编译实践
用QtCreator程序,打开002.zlib-1.2.12.pro文件。
在windows下编译,形成:
在linux下编译,形成:
在macos下编译,形成: