常用库的编译(Windows)(1)

本文介绍以下几种常用库的编译,构建工具Visual Studio 2019

注:本文无特殊说明时构建环境均为x86或x64本机命令提示

zlib

zlib是提供数据压缩之用的库

官方地址: https://zlib.net/

参考文档:https://zlib.net/manual.html

编译依赖:

使用CMAKE编译

CMAKE编译特殊配置如下表,方法请参见CMAKE使用方法

选项备注
AMD64使用x64汇编(注1)
ASM686使用x86汇编 (注2)
BUILD_SHARED_LIBS生成zlib1.dll

注意:使用CMAKE编译默认生成的dll名为zlib.dll

注1:zlib-1.2.11的CMakeLists.txt存在一个bug,如需使用AMD64的汇编请在CMakeLists.txt的第157行之后添加以下内容:

set(ZLIB_SRCS ${ZLIB_SRCS} contrib/masmx64/inffas8664.c)

注2:如使用ASM686汇编需要设置CMAKE的MASM编译参数

选项备注
CMAKE_ASM_MASM_FLAGS/safeseh仅限于Win32的SafeSEH

无须CMAKE的方式

标准方式

nmake /f win32\Makefile.msc

使用汇编(x64)

nmake /f win32\Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"

使用汇编(x86)

nmake /f win32\Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"

安装所需文件

文件备注
zlib1.dll
zdll.libzlib1.dll 导入库
zlib.libzlib静态链接库
zonf.h
zlib.h

libjpeg-turbo

libjpeg-turbo用来取代libjpeg,源代码地址: https://github.com/libjpeg-turbo/libjpeg-turbo

官方地址: https://libjpeg-turbo.org/

文档地址: https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/libjpeg.txt

编译依赖:

CMAKE编译特殊配置如下表,方法请参见CMAKE使用方法

选项备注
WITH_12BIT12位JPEG支持
WITH_ARITH_DEC 算术解码支持
WITH_ARITH_ENC 算术编码支持
WITH_JAVA 包含JAVA,需要JDK
WITH_JPEG7 模拟libjpeg v7 API (禁用v6)
WITH_JPEG8 模拟libjpeg v8 API (禁用v6)
WITH_MEM_SRCDST 启用内存中的源/目标管理?
WITH_SIMD 使用SIMD指令
WITH_TURBOJPEG 包含 TurboJPEG API
REQUIRE_SIMD 强制SIMD指令

libpng

官方地址: http://www.libpng.org/pub/png/libpng.html

文档地址:http://www.libpng.org/pub/png/libpng-manual.txt

源代码地址: https://sourceforge.net/projects/libpng/files/

编译依赖:

使用CMAKE编译

建议设置CMAKE_PREFIX_PATH来自动查找zlib

选项备注
ZLIB_INCLUDE_DIRzlib的头文件位置,包含zlib.h
ZLIB_LIBRARY_RELEASEzlib的Release版导入库
ZLIB_LIBRARY_DEBUGzlib的Debug版导入库

如果单独使用,建议静态链接zlib

使用NMAKE编译(仅静态lib)

本方法不建议使用,首先需要修改scripts\makefile.vcwin32,第18及100行中zlib的头文件和导入库位置

CPPFLAGS = -I..\zlib
$(LD) $(LDFLAGS) -out:$@ pngtest$(O) libpng.lib ..\zlib\zlib.lib $(ERRFILE)

然后执行

nmake /f scripts\makefile.vcwin32

Freeglut 3

官方地址: http://freeglut.sourceforge.net/index.php

文档地址: http://freeglut.sourceforge.net/docs/api.php

编译依赖:

  • CMAKE
  • OpenGL (系统内置)

CMAKE编译特殊配置如下表,方法请参见CMAKE使用方法

选项备注
FREEGLUT_BUILD_DEMOS生成演示程序
FREEGLUT_BUILD_SHARED_LIBS 生成共享库
FREEGLUT_BUILD_STATIC_LIBS 生成静态库
FREEGLUT_PRINT_ERRORS 输出错误信息
FREEGLUT_PRINT_WARNINGS 输出警告信息
INSTALL_PDB安装调试符号(注1)
FREEGLUT_GLES 使用OpenGL ES

注1:仅调试模式可用,当生成静态库时可能会引起安装错误。

libLZMA

libLZMA源与LZMA SDK,这里使用的是XZ Utils 的源代码

官方地址: https://tukaani.org/xz/

直接打开目录下windows/vs2017/xz_win.sln即可编译libLZMA

头文件在以下位置:

  • src/liblzma/api/lzma.h
  • src/liblzma/api/lzma/*

注意:这里不包含XZ Utils中其他的可执行程序

JBIG-KIT

JBIG是一个实现JBIG1压缩标准的库

官方地址: https://www.cl.cam.ac.uk/~mgk25/jbigkit/

源代码中不包含Windows直接运行的脚本,如有需要可以使用以下CMAKE脚本 https://gist.githubusercontent.com/zhuchen115/b156fa4de742a10db2fb2a5eba6db9ea/raw/f1101daf4947c4efbaf1546e6ccd2ee0e332f4b0/CMakeLists.txt

ZSTD

Zstandard是由Facebook的Yann Collet开发的一个无损数据压缩算法。

官方地址:https://facebook.github.io/zstd/

源代码地址: https://github.com/facebook/zstd

官方支持使用CMAKE,Meson,或直接用Visual Studio编译

编译依赖:

CMAKE配置选项如下

选项备注
ZSTD_LEGACY_SUPPORT 传统API支持
ZSTD_MULTITHREAD_SUPPORT 多线程支持
ZSTD_BUILD_PROGRAMS 编译zstd.exe
ZSTD_BUILD_CONTRIB 生成文档和pzstd
ZSTD_BUILD_TESTS 编译测试
ZSTD_USE_STATIC_RUNTIME 使用静态C运行时
ZSTD_BUILD_STATIC 生成静态库
ZSTD_BUILD_SHARED生成动态库
ZSTD_ZLIB_SUPPORT 包含zlib的支持
ZSTD_LZMA_SUPPORT 包含lzma的支持

GIFLIB

官方地址: http://giflib.sourceforge.net/

官方源中不包含Windows可执行文件。如果需要使用CMAKE生成DLL文件,请下载以下文件(直接右键->文件另存为)。

另外还需要修改gif_font.c,在原文件第12行

#include "gif_lib.h"

修改为:

#if defined(_WIN32) || defined(_WIN64)

#define strtok_r strtok_s
#endif
#include "gif_lib.h"

移除gif_has.h中第12行#include<unistd.h>

修改之后即可编译生成GIFLIB的DLL和EXE