一、源码下载及编译
获取源码:https://zlib.net/
找一份source code下载就可以了
下载后解压,进入文件夹,执行
./configure --prefix=$PWD/z_install
make && make install
生成的文件都在z_install文件夹下
二、使用
先提一份正常运行代码
#include <stdio.h>
#include "z_install/include/zlib.h"
int main(){
char *src = "hello123456";
u_int8_t compr[200];
u_int8_t uncompr[200];
uLong ret,comprlen=200,uncomprlen=200;
// uLong destLen = compressBound(sizeof(src)); // 计算压缩后的最大长度
//压缩
ret = compress2(compr, &comprlen, src, strlen(src), Z_BEST_SPEED);
if(ret != 0)
{
printf("compress2 fail,%d\n",ret);
return;
}
printf("comprlen: %d\n",comprlen);
//解压缩
ret = uncompress2(uncompr, &uncomprlen , compr , &comprlen);
if(ret != 0)
{
printf("uncompress2 fail,%d\n",ret);
return;
}
printf("s: %s, uncomprlen:%d\n",uncompr, uncomprlen);
}
然后编译代码
gcc -I./ -L./z_install/lib -Wall -g -rdynamic -c main.c -o obj/main.o
gcc -g -rdynamic -L./z_install/lib -o ./run ./obj/main.o -lz
完成
三、 坑(很深很深)
① comprlen必须初始化值,且等于compr的大小。因为compress2会通过这个参数获取compr的空间大小,防止越界。
② comprlen与uncomprlen 的数据类型必须是uLong,而不能用int。不信可以自行尝试,血与泪的教训