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

发布时间:2024年01月21日

一、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文件:
在这里插入图片描述

配置头文件:

#头文件
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

设置预定义项:

DEFINES += ZLIB_DLL NO_FSEEKO
DEFINES -= UNICODE

win32 {
    DEFINES += _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
}

形成002.zlib-1.2.12.pro文件:

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下编译,形成:
在这里插入图片描述

文章来源:https://blog.csdn.net/LuckyHanMo/article/details/135726501
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。