qt编译quazip静态库_Qt使用quazip库

本文详细介绍了在Qt环境下如何静态编译quazip库,包括编译zlib库、下载quazip源码、修改quazip.pro文件、配置头文件和库文件路径,并在主调工程中使用quazip库进行文件压缩和解压的示例代码。
摘要由CSDN通过智能技术生成

一般地,源文件被预处理>>编译>>汇编>>链接才能生成可执行程序。

编译汇编的基本流程

预处理: 将源文件(.c文件)中的#define和#include等宏定义和包含的头文件等替换进去,成为新的源文件(.i文件);每个.c文件对应一个.i文件。

编译: 将(.i文件)编译成为汇编代码(.asm文件,.s文件),每个.i文件对应一个.s文件.

汇编: 将汇编语言的文件(.s,.asm)翻译成为二进制的文件(内容是一堆机器码, .obj/.o文件),每个.s文件对应一个.o文件。

连接: 将二进制文件(.o文件)连接在一起,形成一个大的应用程序文件(.o/.exe/.elf等)。

静态编译与动态编译

静态编译:编译器在把源文件(.cpp文件)编译可执行文件(.exe文件)时,主程序中调用的函数接口通过查询包含的头文件(.h),把源文件中要调用的函数代码,翻译为库文件(.lib),然后链接到可执行文件中去,使可执行文件在运行时不需要依赖于动态链接库(.dll文件)。

动态编译:编译器在把源文件(.cpp文件)编译可执行文件(.exe文件)时,主程序中调用的函数查询包含的头文件(.h),把源文件中要调的函数代码,翻译为动态链接库文件(.dll),然后链接到可执行文件(.exe)中,运行时,可执行文件查询导出库(.lib)文件,在动态链接库(.dll)中查找函数命令。其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是简单的程序,只用了链接库中一两条命令,也要附带相对庞大的链接库;二是若其他计算机上没有安装对应的运行库,动态编译的可执行文件就不能运行。

综上可知, 不管如何,你要使用一个源码生成库,就必须有以下几个文件:

头文件(.h): 用来给应用程序代码中(主调方)看函数接口定义的;

库文件(.lib/.a): 用来给可执行文件查询.lib的,里面存放着相应函数的地址,或函数的内容。

库文件(.dll/.so): 二进制文件,用来给可执行文件调用的相应的服务函数,它内部实现了被调方的功能。

Qt 使用quazip库进行压缩和解压

1 编译生成windows zlib库

在开始菜单中输入mingling,点击VS2015 x86本机工具命令提示符,切换到目录zlib-1.2.11.tar > zlib-1.2.11 > contrib > masmx86下,运行bld_ml32.bat;

最终生成的inffas32.obj和match686.obj是我们需要的.

回到zlib-1.2.11根目录,执行以下命令:nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="contrib/masmx86/inffas32.obj contrib/masmx86/match686.obj".

生成了zlib1.dll动态库,这是我们后面要用的。

编译生成quazip工程

去https://github.com/stachenov/quazip下载quazip文件夹,qztest可以不用下载。

在quazip目录下(该目录还同时有debian文件夹)下新建文件夹include和文件夹lib。

将zlib中的头文件zlib.h和zconf.h放到include中, 把zlib1.dll放到lib中。

修改quazip.pro工程文件, 添加头文件路径和动态库路径

bash INCLUDEPATH += $$PWD/include LIBS += -L$$PWD/lib -lzlib1

编译,会自动生成libquazipd.dll(Debug模式下)和libquazip.dll(Release模式下), 以及libquazipd.a或libquazip.a。

在主调工程中使用

在工程根目录(该目录下还包括了.pro文件)下新建文件夹include和文件夹lib。

将quazip中所有头文件,如ioapi.h,quazip.h,unzip.h,JlCompress.h等放在include中,将quazip.dll和quazipd.dll和zlib1.dll放在lib文件夹中。

在工程文件.pro中,添加头文件和库文件路径。

INCLUDEPATH += $$PWD/include

CONFIG(debug, debug|release) {

LIBS += -L$$PWD/lib -lquazipd

} else {

LIBS += -L$$PWD/lib -lquazip

}

在主调程序中书写以下代码以使用该库:

#include "mainwindow.h"

#include

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

JlCompress::compressDir("D:/testzip/a.zip", "D:/testzipdir1");

JlCompress::extractDir("D:/testzip/a.zip", "D:/testzipdir2");

return a.exec();

}

标签:文件,Qt,lib,dll,编译,quazip,使用,include

来源: https://www.cnblogs.com/charleechan/p/12144950.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值