1. 编译zlib
quazip库是基于Qt的压缩解压库,使对zlib库的封装。因此要使用quazip库就需要先编译zlib。
下载zlib 。
为了在Qt中使用,编译环境统一使用Qt的MinGW工具链。
解压源码,打开Qt的MinGW命令行控制台。
make -f ./win32/Makefile.gcc
复制出zconf.h
、zlib.h
、zlib1.dll
备用:
2. 编译quazip
这里搞了半天才搞定。网上教程都是旧版本的,使用的是 .pro
文件,qmake进行编译。最新版本已经不使用qmake进行编译了。由于我前面运行命令出错,导致我的 CMakeLists.txt 文件被替换了内容,然后怎么编译都不成功。文件内容替换后居然还是编译整个项目,只不过是编译可执行文件。但是由于去少一些环境设置,导致链接时找不到Qt与相关的库。后面重新解压了源码文件才编译通过。
下载源码 。
主页有编译教程。真的非常简单,只有两个命令就搞定了,失误导致我浪费了很多时间。一定使用Qt的MinGW工具链,不要使用msys2或者自己安装的编译工具链,否则会编译不过。另外cmake最好也安装windows版的,不要使用msys2中的。
解压源码,进入到源码目录。然后照着网关主页的教程,进行本地化的修改执行。
mkdir build; cd build
cmake -S ../ -B ./ -D QUAZIP_QT_MAJOR_VERSION=5 -G "MinGW Makefiles"
命令执行报错了。cmake会去找到zlib库。但是由于zlib没有在cmake的搜索路径中,因此找不到而报错。由于上面zlib不是使用cmake编译的,因此在这里,修改quazip中的 CMakeLists.txt 文件,屏蔽掉这个问题,并添加zlib的搜索路径。
注释掉源码目录CMakeLists.txt中的关于搜索zlib相关的命令:
再修改 quazip
目录下的 CMakeLists.txt 直接添加zlib库:
link_directories("D:\\library\\lib_zlib\\lib")add_library(${QUAZIP_LIB_TARGET_NAME} ${QUAZIP_SOURCES})
add_library(QuaZip::QuaZip ALIAS ${QUAZIP_LIB_TARGET_NAME})target_link_libraries(${QUAZIP_LIB_TARGET_NAME} zlib1.dll)
再次生成,依然报错。bzip2下载不下来。
重试,还是下载不下来,但是没有错误报出来。
既然没有错那就先不管,直接编译:
cmake --build . -j20
生成动态库成功。虽然前面有问题。前面无法下载bzip2的问题,可以手动下载,然后再编译。这里我就不管了。这里将动态库和头文件
复制出 libquazip1-qt5.dll
和所有头文件备用。
3. 添加到Qt工程
在我们得工程中添加相关的代码。
#include "mainwindow.h"
#include <QApplication>
#include <libquazip/include/JlCompress.h>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();JlCompress::compressDir("D:\\library\\zlib.zip", "D:\\library\\lib_zlib");return a.exec();
}
在 .pro
文件中添加头文件路径和动态库,添加我们前面生成的库文件的路径,这里只需要添加quazip库就行了。
LIBS += -L$$PWD/libquazip/ -lquazip1-qt5
INCLUDEPATH += $$PWD/libquazip
然后编译,就没什么问题了。但是运行的时候,会直接挂掉,原因是找不到动态库。因为我这里只支持动态链接,所以需要将前面编译生成的两个动态库文件放到运行目录下面去。Qt Creator调试运行目录是在类似 build-Onekey_Pi-Desktop_Qt_5_12_12_MinGW_32_bit-Debug
。
将 zlib1.dll
和 libquazip1-qt5.dll
两个动态库都放到这个目录下,然后调试运行。程序就能够正常起来,否则,缺一都是会直接导致程序启动退出。
运行后,压缩成功: