转自wo13142yanyouxin原文vs2013载入zlib库,即include "zlib.h"

在程序中,我们经常要用到压缩,解压函数。以压缩函数compress为例进行说明。步骤如下:

1,官网(GO TO)上下载zlib库,我下载的是zlib-1.2.11库(当下最新的就好),解压文件。

2,找到vs2013自身的命令提示窗口:开始——所以程序———vs2013————Visual Studio Tools————VS2013 x64 本机工具命令提示。

3,在打开的命令行中转换到“zlib-1.2.11\zlib-1.2.11\contrib\masmx64”目录中,执行bld_ml64.bat文件(32位电脑进入masmx32中),此时会生成2个obj文件。

4,调用“ml”命令,ml是vs2013中一个ml.exe执行程序。如果此时报“ml不是可执行命令,,,,”,在vs2013的安装目录中找ml.exe,复制到“zlib-1.2.11\zlib-1.2.11\contrib\masmx64”目录中,就可以解决这个问题了。调用ml命令编译inffas32.asm和match686.asm,生成inffas32.obj和match686.obj(生成在本目录下)。这两个文件在zlibvc中用到

5,进入"\zlib-1.2.11\zlib-1.2.11\contrib\vstudio\vc11"目录中,找到zlibvc.sln,执行:

(1). zlibvc生成动态链接库zlibwapi.dll和对应的导入库zlibwapi.lib
                  (2). zlibstat生成静态链接库zlibstat.lib
                  (3). testzlibdll测试生成的动态链接库zlibwapi.dll
                  (4). testzlib测试生成的静态链接库zlibstat.lib        
  最后我们在debug模式下编译整个解决方案。生成的dll和lib文件可在相应的文件夹中找到在编译中可能会出现下面问题:

  1.error LNK2026: module unsafe for SAFESEH image修改属性/linker/高级/映像具有安全异常处理程序/ YES 改为 No

  2.fatal error LNK1118: syntax error in ‘version’ statement打开zlibvc.def文件VERSION 修改为1.28即可(原来是1.2.8)

6,环境已经搭好,接下来进行测试:新建一个测试程序,并且设置属性

a. 包含头文件
                属性--C/C++--常规--附加包含目录(添加包含.h的目录)
             b. 定义宏
                属性--C/C++--预处理器--预处理器定义:添加 ZLIB_WINAPI(一定要加,否则提示“无法解析外部命令”)
             c. 项目包含.lib文件所在的目录:
                  属性--链接器--常规--附加库目录
             d. 项目包含.lib文件
                       属性--链接器--输入--附加依赖项(zlibwapi.lib)
              e. 项目代码中 #include "zlib.h"
                        编译生成.exe文件需要.dll文件支持(动态加载)

7进行测试,代码如下(本人亲测,绝对可以运行)

#include <stdlib.h>
#include <stdio.h>
#include <zlib.h>
int main(int argc, char* argv[])
{
FILE* file;
uLong flen;
unsigned char* fbuf = NULL;
uLong clen;
unsigned char* cbuf = NULL;
/* 通过命令行参数将srcfile文件的数据压缩后存放到dstfile文件中 */
if (argc < 3)
{
printf("Usage: zcdemo srcfile dstfile\n");
return -1;
} if ((file = fopen(argv[1], "rb")) == NULL)
{
printf("Can\'t open %s!\n", argv[1]);
return -1;
}
/* 装载源文件数据到缓冲区 */
fseek(file, 0L, SEEK_END); /* 跳到文件末尾 */
flen = ftell(file); /* 获取文件长度 */
fseek(file, 0L, SEEK_SET);
if ((fbuf = (unsigned char*)malloc(sizeof(unsigned char)* flen)) == NULL)
{
printf("No enough memory!\n");
fclose(file);
return -1;
}
fread(fbuf, sizeof(unsigned char), flen, file);
/* 压缩数据 */
clen = compressBound(flen);
if ((cbuf = (unsigned char*)malloc(sizeof(unsigned char)* clen)) == NULL)
{
printf("No enough memory!\n");
fclose(file);
return -1;
}
if (compress(cbuf, &clen, fbuf, flen) != Z_OK)
{
printf("Compress %s failed!\n", argv[1]);
return -1;
}
fclose(file); if ((file = fopen(argv[2], "wb")) == NULL)
{
printf("Can\'t create %s!\n", argv[2]);
return -1;
}
/* 保存压缩后的数据到目标文件 */
fwrite(&flen, sizeof(uLong), 1, file); /* 写入源文件长度 */
fwrite(&clen, sizeof(uLong), 1, file); /* 写入目标数据长度 */
fwrite(cbuf, sizeof(unsigned char), clen, file);
fclose(file); free(fbuf);
free(cbuf); return 0;
}

补充:上面的都是一些基本操作,我觉得虽然这样函数都被封装好了,但是我觉得自己应该还是要知道其原理,所以我自己总结了一些关于压缩的方面的知识:见我的下一个博客,,,,

vs2013载入zlib库,即include "zlib.h"的更多相关文章

  1. [02]APUE:POSIX 正则库(#include <regex.h>)

    正则匹配流程: 声明一个 regex_t 类型的变量(结构体) regcomp 函数会将“正则匹配条件”写入此结构体,并编译成特定的二进制格式(加快匹配速度) 声明一个 regmatch_t 类型的变 ...

  2. Windows / Linux 一件编译zlib库

    一. 下载zlib库 : http://www.zlib.net 本文以  zlib-.tar.xz  为例 二. 解压文件得到 zlib- 文件夹,修改 zlib-/CMakeLists.txt 文 ...

  3. zlib库的编译及使用

    * 打开网址http://zlib.net/ 下载zlib源码, * 解压压缩包,进入目录:C:\Users\Administrator\Desktop\zlib-1.2.11\zlib-1.2.11 ...

  4. 利用zlib库进行zip解压

    1:到zlib官网上下载zlib,本文下载的是1.2.8的版本. 2:进行./configure,然后make. 3:进入zlib库中的contrib/minizip/路径下make,生成的miniz ...

  5. ZLIB 库

    zlib 编辑 zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表.zlib使用DEFLATE算法,最初是为libp ...

  6. Windows下zlib库和libPng库的编译和使用

    关于zlib库和libpng是干嘛的,我就不说了,度娘和谷歌都能告诉你.这里主要记录下windows下如何利用vs2010编译和使用这两个库. 一.zlib库的编译 首先要下载这个库,这个谷歌和百度也 ...

  7. 使用zlib库进行目录打包

    代码很简单,具体过程就不写了. 关于加密压缩,可以看http://www.zlib.net/zlib_faq.html#faq38 中的描述,说是不支持的,但是创建的时候可以传入密码进去,不过我还没有 ...

  8. [Zlib]_[初级]_[使用zlib库压缩和解压STL string]

    场景 1.一般在使用文本json传输数据, 数据量特别大时,传输的过程就特别耗时, 因为带宽或者socket的缓存是有限制的, 数据量越大, 传输时间就越长. 网站一般使用gzip来压缩成二进制. 说 ...

  9. Zlib库的安装与使用

    在实际应用中经常会遇到要压缩数据的问题,常见的压缩格式有zip和rar,而Linux下那就更多了,bz2,gz,xz什么的都有,单单Linux下的解压和压缩命令就有好多呢?没有什么好不好的.查了资料, ...

随机推荐

  1. service-worker实践

    service-worker虽然已列入标准,但是支持的浏览器还是有限制,还有比较多的问题. 1. 生命周期 注册成功-------installing--------------> 安装成功(i ...

  2. ogre3D学习基础1 -- 核心对象与脚本技术

    一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...

  3. Linux下python升级到python-2.7.13

    下载python最新版本2.7.13并编译安装 wget https://www.python.org/ftp/python/2.7.12/Python-2.7.13.tar.xz xz -d Pyt ...

  4. Python基础-week08 并发编程

    一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  5. Leetcode 565.数组嵌套

    数组嵌套 索引从0开始长度为N的数组A,包含0到N - 1的所有整数.找到并返回最大的集合S,S[i] = {A[i], A[A[i]], A[A[A[i]]], ... }且遵守以下的规则. 假设选 ...

  6. Flask-WebSocket案例

    实验1:实现初始的通信 客户端:用浏览器向服务端发送信息 服务端:首先接收浏览器发来的信息,并作出相应应答 第一步:需要导入模块: from flask import Flask,request fr ...

  7. [oldboy-django][2深入django]Form组件功能: 数据格式验证 + 保留上次输入的值

    1 需求:登录或者注册页面存在以下问题 - 无法记住上次提交的内容,(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)- 重复进行提交数据的校验(数据是否为空,长度大小等等) 2 d ...

  8. c++ 中double与string之间的转换,char *

    运行代码为 /* * main.cpp * * Created on: Apr 7, 2016 * Author: lizhen */ #include <iostream> //#inc ...

  9. linux批量匹配移动文件的方法

    需求 有需要移动的文件名清单 filename.txt filename.txt 内容如下: 15542842 1582457 1282427 1532158 4542457 1582453 6552 ...

  10. redis linux 集群

    redis集群:官方教程 步骤: 1.安装redis 2.修改配置文件redis.conf(集群所需基础配置) port 7000 cluster-enabled yes cluster-config ...