windows下编译libzip库

源码

编译libzip需要依赖zlib的库

zlib和libzip的git代码:

https://github.com/madler/zlib.git

https://github.com/nih-at/libzip.git

 

他们通过cmake进行编译,官方的readme和install知道我们的编译安装方式为:

mkdir build 

cd build 

cmake .. 

make 

make test 

make install

这里的方式大概是建一个build的目录,然后将cmake的结果放在build里,然后make编译。

 

Windows编译方式

在windows上进行编译,支持有两种方式:

  • gnu环境
  • window环境,转化成sln组织工程

gnu环境编译同上。

 

用vs进行编译

可以参考这个:

https://blog.csdn.net/weixin_33831196/article/details/90305366

中间有一部分

cmake .. -G"Visual Studio 15 2017" -DCMAKE_PREFIX_PATH="../zlib/build/install"

然后我改掉了之后,后面的cmake默认都变成了Visual Studio的方式了。。。

是用cmake -G 可以查看所有的编译

 

使用mingw进行编译

因为我是用mwing单独编译的zlib的库,所以有个问题我只编译zlib并没有安装(也不想安装)。整体的思路readme一样

按照步骤操作,cmake ..的时候碰到了ZLIB_INCLUDE_DIR找不到的问题。

看上下文 cmake .. 找到上一级的CMakeList.txt,而且build目录也有个CMakeList.txt。所以考虑是不是这里的CMakefile是从上一级来的

看到build里面有句

ZLIB_INCLUDE_DIR:PATH=ZLIB_INCLUDE_DIR-NOTFOUND

从上一级的CMakeList.txt找到这么两句

I

NCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) SET(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})

暂时没看出来什么问题

 

把ZLIB_INCLUDE_DIR:PATH=改成对应目录在执行cmake的时候makefile就出来了(如果这个项找不到会自动生成,但生成过修改了却不会自动更新)。虽然有一堆别的Lib找不到,但不影响编译。

 

编译make

接着编译makefile。但是会找不到zlib的库的连接,把库的链接单独加到makefile里

但会提醒找不到一个头文件bcrypt.h。这个文件是一堆加密库的定义。因为vs环境过了,所以vs里的Windows API kit的头文件肯定有这个文件,一开还真的有。但是不能天真的复制过来。

最后还是把这个里的内容复制过去放在mingw的系统include里(甚至有怀疑是不是我mingw版本不够)

https://searchcode.com/codesearch/view/18140805/

但是接着编译还是会发现边报错,原因还是少几个定义。这时候从vs的开发包里的这个文件的定义直接复制过去吧。

然后关于这个就不报错了。

 

但是接着发现了另一个问题,提示没有random函数,查看了一下这个文件应该在stdlib.h这个头文件里。

然后查阅了mingw的stdlib.h发现并没有这个函数,但是有一个叫做rand和srand的函数。所以。。。把libzip源代码里的这两个函数名改一下就可以了。

再次编译,就发现编译成功,并生成了库。

但是使用make test会发现一堆fail,还没有找到啥毛病。

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文件夹。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值