【QT+QGIS跨平台编译】之二:【zlib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录

一、zlib介绍

zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数。zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数。

zlib能检测解压出来的数据完整性,由Jean-loup Gailly与Mark Adler所开发。最新版本为1.2.12。

zlib初版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。


二、文件下载

zlib网址:

https://www.zlib.net/

获取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下编译,形成:

相关推荐
翰墨之道10 个月前
【QT+QGIS跨平台编译】之三:【OpenSSL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
qgis·openssl·qgis跨平台编译·openssl编译·openssl跨平台编译·qgis编译
翰墨之道10 个月前
【QT+QGIS跨平台编译】之一:【sqlite+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
sqlite·qgis·sqlite编译·sqlite跨平台编译·qgis跨平台编译·sqlite+qt