源码
编译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,还没有找到啥毛病。