zlib、libzip、 libzippp 库编译(windows + cmake + vs2013)

这篇博客详细记录了在Windows上使用CMake和Visual Studio 2013编译zlib、libzip及其封装库libzippp的步骤,包括创建build目录、配置CMake参数、解决编译错误和安装路径设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"libzipp" 这库是基于 "libzip" 之上封装的,而 "libzip" 又是基于 "zlib"库封装的,所以要编译 "libzipp" 库就要先编译其他两个库。
下载准备:
"zlib-1.2.8.tar.gz"
"libzip-1.0.1.tar.gz"
"libzippp-master.zip"




编译环境:cmake + vs2013 ,   安装好cmake和 "VS2013 x86 本机工具命令提示" 工具(安装vs2013的时候已经有)
命令行环境使用的是[VS2013 x86 本机工具命令提示],“开始”->"Visual Studio 2013"->"Visual Studio Tools"->"VS2013 x86 本机工具命令提示"


以下是本次编译过程,记录详细流程以备忘:


一、编译 zlib 库
1、将解压出来的 "zlib-1.2.8" 文件夹拷贝到 "E:\BuildWorkspace\" ;
2、命令行进入此路径,命令:[mkdir build] (创建 build 文件夹) ;
3、进入刚创建的"build"文件夹,命令:[cmake .. -G"Visual Studio 9 2008" -DCMAKE_INSTALL_PREFIX="install"]  (构建工程)
4、在"build"目录下就有了工程文件,打开工程,编译"ALL_BUILD"项目生成库文件,编译"INSTALL"项目,会执行工程目录下的"cmake_install.cmake"脚本,最终在"build"目

zlib是提供数据压缩用的函式,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式所写的,后来普遍为许多软件所使用。此函式为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。 qlibzip 是基于zlib的一个实用程序,使用Qt和Windows一些底层API实现,它主要用于将文件夹压缩到一个zip文件,或将一个zip文件解压缩到文件夹。 //------------------------------------------------------------------------------ // Description: Compress files to a ZIP file. // Parameter: sourceFiles Source files, supporting wildcards. // Parameter: destFile The ZIP file path. // Return Value: true/false. //------------------------------------------------------------------------------ extern "C" bool ZipCompress(const QString &sourceFiles, const QString &destFile); //------------------------------------------------------------------------------ // Description: Extract files from a ZIP file. // Parameter: sourceFile Source ZIP file. // Parameter: destFolder The folder to output files. The parent of the // specified folder MUST exist. // Return Value: true/false. //------------------------------------------------------------------------------ extern "C" bool ZipExtract(const QString &sourceFile, const QString &destFolder); //------------------------------------------------------------------------------ // Description: Extract special file from a ZIP file into memory block. // Parameter: sourceFile Source ZIP file. // Parameter: entryName Special entry name in ZIP file. // Return Value: Extracted memory block. //------------------------------------------------------------------------------ extern "C" QByteArray ZipExtractItem(const QString &sourceFile, const QString &entryName); 具体实例请看demo文件夹。
<think>好的,我需要帮助用户了解如何在Qt和MinGW环境下编译libzip。首先,我需要回顾用户提供的引用资料,看看是否有相关的编译步骤可以参考。用户提到了MinGW编译zlib、libpng、libjpeg等的步骤,以及Qt环境下编译zlib和quazip的方法。这些信息可能对编译libzip有帮助,因为libzip依赖zlib,而用户可能已经熟悉这些编译流程。 首先,我需要确认libzip的依赖项。根据官方文档,libzip需要zlib、BZip2(可选)、OpenSSL(可选)和CMake。用户之前编译zlib,所以可能需要先编译zlib,并确保它的路径正确。接下来,用户使用MinGW和Qt的环境,可能需要设置正确的工具链,比如使用MinGW的gcc和make。 然后,我需要检查用户提供的引用中的编译步骤。例如,引用[2]中提到拷贝pnglibconf.h.prebuilt并重命名,然后使用makefile.gcc进行编译。这可能意味着在编译某些时需要预处理步骤,比如复制配置文件。类似地,引用[3]和[4]提到了使用makefile.gcc和mingw32-make命令,这可能在libzip编译中也是适用的步骤。 接下来,我需要考虑用户的环境配置是否正确。用户使用Qt的MinGW工具链,需要确保Qt的MinGW版本与编译libzip所需的工具链兼容。例如,用户可能需要将MinGW的bin目录添加到系统PATH中,以便能够调用gcc、make等命令。 然后,我需要规划编译libzip的具体步骤。可能包括下载源码、配置CMake、生成Makefile、执行编译和安装。用户可能需要设置zlib的路径,例如通过设置CMAKE_PREFIX_PATH或者指定zlib的include和lib目录。此外,可能需要处理Windows下的路径问题,比如使用反斜杠或正斜杠。 在编写步骤时,需要注意用户可能遇到的常见问题,比如找不到zlib头文件或链接,或者CMake生成配置失败。可能需要指导用户如何检查这些配置,例如通过CMake的输出信息,或者手动指定zlib的位置。 最后,用户可能需要将编译好的libzip集成到Qt项目中,这包括在.pro文件中添加INCLUDEPATH和LIBS路径,并确保动态链接(DLL)在运行时可用。可能需要提醒用户将生成的DLL文件复制到应用程序目录下,或者设置环境变量。 总结起来,步骤可能包括: 1. 安装依赖项,如zlib,并确保其正确编译。 2. 下载libzip源码。 3. 使用CMake配置生成Makefile,指定MinGW工具链和zlib路径。 4. 使用mingw32-make进行编译和安装。 5. 在Qt项目中配置libzip的路径和链接。 需要确保每一步都清晰,并参考用户之前的经验,比如使用makefile.gcc和mingw32-make命令。同时,需要提醒用户注意路径的正确性,特别是在Windows环境下可能出现的斜杠问题,以及确保所有依赖项都被正确找到。</think>### 使用 libzip 在 Qt 和 MinGW 环境下的编译指南 以下步骤基于 MinGW 工具链和 Qt 环境配置,结合您提供的引用内容[^1][^2][^3][^4],整理出 libzip编译方法: --- #### **1. 环境准备** - **MinGW 工具链**:确保已安装 Qt 自带的 MinGW(例如 `mingw73_32` 或 `mingw81_64`),并将其 `bin` 目录添加到系统 `PATH` 变量中。 - **依赖**: - **zlib**:需提前编译 zlib(参考引用[^4]),生成 `zlib.h`、`zconf.h` 和 `libz.dll.a`,并将头文件与文件分别放在 `include` 和 `lib` 目录中。 - **CMake**:安装 CMake 用于生成构建文件。 --- #### **2. 编译 libzip** **步骤 1:下载源码** 从 [libzip 官方仓](https://libzip.org/) 下载源码并解压。 **步骤 2:CMake 配置** 打开命令行,进入源码目录,执行以下命令: ```bash mkdir build && cd build cmake -G "MinGW Makefiles" \ -DCMAKE_INSTALL_PREFIX=./install \ -DCMAKE_PREFIX_PATH="C:/path/to/zlib" \ -DENABLE_OPENSSL=OFF \ -DBUILD_SHARED_LIBS=ON \ .. ``` **关键参数说明**: - `-G "MinGW Makefiles"`:指定生成 MinGW 兼容的 Makefile[^3]。 - `-DCMAKE_PREFIX_PATH`:指向 zlib 的安装目录(包含 `include` 和 `lib` 子目录)。 - `-DENABLE_OPENSSL=OFF`:若无需加密支持,关闭 OpenSSL 依赖。 **步骤 3:编译与安装** ```bash mingw32-make -j4 # 编译,-j4 表示使用4线程加速 mingw32-make install # 安装到 ./install 目录 ``` 编译完成后,`install` 目录会包含 `include`(头文件)和 `lib`(文件如 `libzip.dll.a`)。 --- #### **3. 在 Qt 项目中集成 libzip** **步骤 1:配置项目文件(.pro)** 在 Qt 项目的 `.pro` 文件中添加以下内容: ```qmake INCLUDEPATH += "C:/path/to/libzip/install/include" LIBS += -L"C:/path/to/libzip/install/lib" -lzip -lz ``` **说明**: - `-lzip` 链接 libzip 动态,`-lz` 链接 zlib 。 **步骤 2:部署动态** 将 `libzip.dll`(位于编译后的 `bin` 目录)复制到 Qt 项目的可执行文件目录中,确保运行时能找到依赖。 --- #### **常见问题解决** 1. **CMake 报错找不到 zlib** - 检查 `CMAKE_PREFIX_PATH` 是否指向正确的 zlib 路径,确保包含 `include/zlib.h` 和 `lib/libz.dll.a`。 - 手动指定路径: ``` -DZLIB_INCLUDE_DIR="C:/zlib/include" -DZLIB_LIBRARY="C:/zlib/lib/libz.dll.a" ``` 2. **链接错误:undefined reference** - 确认 `LIBS` 中的顺序:`-lzip` 必须在 `-lz` 之后,以解决依赖关系[^4]。 --- #### **相关拓展问题** 1. 如何在 libzip 中实现 ZIP 文件的加密和解密? 2. 如何静态编译 libzip 以减少运行时依赖? 3. libzip 与其他压缩(如 quazip)的性能对比如何? : MinGW 编译 zlib、libpng、libjpeg 的通用流程。 : 使用预构建配置文件和 Makefile.gcc 的方法。 : MinGW 环境下动态编译的典型命令。 : 头文件与文件的部署路径对 Qt 项目的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值