这里使用的是 QuaZip 方案。它调用了 zlib1.dll,如果是32位,直接编译 QuaZip 即可,默认就是32位。

如果是64位,不兼容的 zlib1.dll 会导致编译失败,需要自己编译 zlib。

一、编译Zlib

转自:https://blog.csdn.net/yxy244/article/details/105024989

编译环境:VS2017

1. 官网下载zlib库

http://www.zlib.net/

img
img

解压到一个好找的位置,这里是直接放D盘。

2.命令行编译32位dll

img
img

1.最常见的方式,开始菜单找到VS命令提示符工具,输入cd 复制粘贴zlib库的路径(你下载解压的zlib文件路径),回车切换到zlib目录下

img
img

2.输入nmake -f win32/Makefile.msc 回车开始编译

img
img

3.简单两步,在zlib目录下就生成了静态库和动态库了,生成的是x86版本。

img
img

3.命令行编译64位dll

img
img

1.编译32位用的是x86的命令提示工具,编译64位需要在开始菜单找到x64的命令提示工具,输入cd zlib库的路径,回车切换到zlib目录下

img
img

2.输入 nmake -f win32/Makefile.msc AS=ml64 LOC=”-DASMV -DASMINF -I.” OBJA=”inffasx64.obj gvmat64.obj inffas8664.obj”

执行编译

img
img

3.如果遇到错误提示 inffasx64.obj:fatal error LNK1112:模块计算机类型“x64”与目标计算机类型“x86”冲突,

img
img
先删除之前编译x86生成的obj文件,输入 del *.obj 执行删除目录下的所有obj文件
img
img

\4. 再次执行 nmake -f win32/Makefile.msc AS=ml64 LOC=”-DASMV -DASMINF -I.” OBJA=”inffasx64.obj gvmat64.obj inffas8664.obj” ,顺利的话就能得到64位的静态库、动态库和导入库了。

img
img

成功的 zlib1.dll,替换到 quazip 中的 lib/zlib1.dll。

二、编译QuaZip

转自:https://blog.csdn.net/xiaopei_yan/article/details/90267714

zlib编译详见
https://blog.csdn.net/zhangxuechao_/article/details/85049711

下载quazip
https://github.com/stachenov/quazip

也可直接下载我配置好的quazip
https://github.com/zwx230741/quazip.git

加入头文件
在quazip中创建include文件夹

1
1

将zlib头文件拷贝到include文件夹下

2
2

加入动态库文件
在quazip中创建lib文件夹

1
1

将zlib编译好的动态库拷贝到lib文件夹下

2
2

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

1
2
3
INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -lzlib1
12
3
3

编译动态库

3
3

不加入头文件,报以下错误

4
4

创建测试工程quazipTest
同理,创建include和lib目录。分别放头文件和动态库文件

5
5

拷贝头文件
从quazip拷贝所有头文件

2
2

拷贝库文件
拷贝刚刚生成的动态库文件。quazipd.dll是Debug生成的,quazipd.dll是Release生成的,zlib1.dll是zlib动态库

3
3

quazipTest工程配置
修改quazipTest.pro工程文件。添加头文件路径和动态库路径

1
2
3
4
5
6
7
INCLUDEPATH += $$PWD/include

CONFIG(debug, debug|release) {
LIBS += -L$$PWD/lib -lquazipd
} else {
LIBS += -L$$PWD/lib -lquazip
}

添加压缩解压代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "mainwindow.h"
#include <QApplication>
#include <JlCompress.h>

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();
}

测试好的工程:https://github.com/zwx230741/quazipTest.git