IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    在Windows中编译zlib

    jakes发表于 2014-10-12 12:53:06
    love 0

    我们可以为zlib编译两种版本,MINGW和VS。

    zlib源码: http://www.zlib.net/

    MINGW

    先安装MINGW编译器

    http://www.mingw.org/

    如果有装MINGW编译版的Qt开发环境的话可以直接使用附带的MING编译器,路经一般是:QTDIR/Tools/mingw482_32/bin

    将这个路径加入PATH中,也可以在CMD中用如下命令临时加入到PATH中(自行改为MINGW的正确路径)

    path=E:\Programming\Qt\Qt5.3.1.mingw\Tools\mingw482_32\bin

    设置好路径后,切换到zlib源码目录下执行如下命令就可以完成编译:

    mingw32-make -f win32/makefile.gcc

    看到下面输出就大功告成了~

    gcc  -O3 -Wall -c -o adler32.o adler32.c
    gcc  -O3 -Wall -c -o compress.o compress.c
    gcc  -O3 -Wall -c -o crc32.o crc32.c
    gcc  -O3 -Wall -c -o deflate.o deflate.c
    gcc  -O3 -Wall -c -o gzclose.o gzclose.c
    gcc  -O3 -Wall -c -o gzlib.o gzlib.c
    gcc  -O3 -Wall -c -o gzread.o gzread.c
    gcc  -O3 -Wall -c -o gzwrite.o gzwrite.c
    gcc  -O3 -Wall -c -o infback.o infback.c
    gcc  -O3 -Wall -c -o inffast.o inffast.c
    gcc  -O3 -Wall -c -o inflate.o inflate.c
    gcc  -O3 -Wall -c -o inftrees.o inftrees.c
    gcc  -O3 -Wall -c -o trees.o trees.c
    gcc  -O3 -Wall -c -o uncompr.o uncompr.c
    gcc  -O3 -Wall -c -o zutil.o zutil.c
    ar rcs libz.a adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o
    gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
    windres --define GCC_WINDRES -o zlibrc.o win32/zlib1.rc
    gcc -shared -Wl,--out-implib,libz.dll.a  \
    -o zlib1.dll win32/zlib.def adler32.o compress.o crc32.o deflate.o gzclose.o gzl
    ib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr
    .o zutil.o  zlibrc.o
    strip zlib1.dll
    gcc  -O3 -Wall -I. -c -o example.o test/example.c
    gcc  -o example.exe example.o libz.a
    strip example.exe
    gcc  -O3 -Wall -I. -c -o minigzip.o test/minigzip.c
    gcc  -o minigzip.exe minigzip.o libz.a
    strip minigzip.exe
    gcc  -o example_d.exe example.o libz.dll.a
    strip example_d.exe
    gcc  -o minigzip_d.exe minigzip.o libz.dll.a
    strip minigzip_d.exe

    有用的文件

    zlib.h                                         zlib的头文件,包含了所有zlib函数的生明

    -    libz.a                                   用于静态链接的静态库

    -    zlib1.dll                               动态链接的DLL

    libz.dll.a                           动态链接所需要的导入库

    同时生成的还有几个可执行文件

    minigzip.exe                   静态编译的test/minigzip.c

    minigzip_d.exe              动态编译的test/minigzip.c

    用法:

    * Usage: minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...]
    * -c : write to standard output
    * -d : decompress
    * -f : compress with Z_FILTERED
    * -h : compress with Z_HUFFMAN_ONLY
    * -r : compress with Z_RLE
    * -1 to -9 : compression level

    example.exe                    静态编译的test/example.c

    example_d.exe               动态编译的test/example.c

    用法:

    * Usage:  example [output.gz  [input.gz]]

    VS2013 编译zlib

    打开VS2013的 "VS2013 x86 本机工具命令提示", 在开始菜单->所有程序->Visual Studio 2013->Visual Studio Tools里可以找到

    切换到zlib源码目录:

    cd contrib\masmx86
    bld_ml32.bat
    copy inffas32.obj ..\..\
    copy match686.obj ..\..\
    cd ..\..\
    nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"

    没有问题的话就编译成功了。由于命名约定不一样,VS版和MINGW版生成的文件名有点不同。

    zlib.lib  对应  libz.a

    zdll.lib   对应  libz.dll.a



沪ICP备19023445号-2号
友情链接