本文介绍以下几种常用库的编译,构建工具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.lib | zlib1.dll 导入库 |
zlib.lib | zlib静态链接库 |
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_12BIT | 12位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_DIR | zlib的头文件位置,包含zlib.h |
ZLIB_LIBRARY_RELEASE | zlib的Release版导入库 |
ZLIB_LIBRARY_DEBUG | zlib的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