编译FFMpeg windows 静态库的基本方法。
下载msys2
请在 官网 查找并下载
安装msys2
没什么可说的,下一步下一步……OK。
配置vs环境
@echo off
set MSYS2_PATH_TYPE=inherit
set PATH=%PATH%;C:\msys64"
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
msys2_shell.cmd -mingw32
安装一些工具集合
pacman -S pkg-config
pacman -S diffutils
pacman -S yasm
pacman -S nasm
添加zlib库的依赖
由于png等一些压缩格式是需要依赖zlib的,所以这里,需要把编译好的zlib静态库,放到FFmpeg源码目录下面
$ ls -altR zlib
zlib:
total 12
drwxr-xr-x 1 melot None 0 Jul 24 11:40 ..
drwxr-xr-x 1 melot None 0 Jul 24 11:32 lib
drwxr-xr-x 1 melot None 0 Jul 24 09:34 include
drwxr-xr-x 1 melot None 0 Jul 24 09:34 .
zlib/lib:
total 116
drwxr-xr-x 1 melot None 0 Jul 24 11:32 .
drwxr-xr-x 1 melot None 0 Jul 24 09:34 ..
-rw-r--r-- 1 melot None 115498 Jul 23 17:01 zlib.lib
zlib/include:
total 116
-rw-r--r-- 1 melot None 16818 Jul 24 10:55 zconf.h
drwxr-xr-x 1 melot None 0 Jul 24 09:34 .
drwxr-xr-x 1 melot None 0 Jul 24 09:34 ..
-rw-r--r-- 1 melot None 98151 Jul 23 10:40 zlib.h
编译
configure命令
这里有两点是需要注意的:
- 注意–extra-ldflags --extra-ldflags、–extra-ldflags的适用
- 生成的库文件其实并没有链接zlib的,因此需要在适用FFMpeg库的时候还需要包含zlib。(通过make V=1我们可以看到链接libavcodec.a这些库的时候是没有-Lzlib等参数的,但ffmpeg.exe是有的)
- 在configure阶段出错还可以参看config.log这个文件,说不定你就有了新的发现
./configure --toolchain=msvc --arch=x86 --prefix=./buildout --enable-asm --enable-decoder=png --enable-encoder=png --disable-x86asm --extra-cflags=-I"./zlib/include" --extra-ldflags=-LIBPATH:"./zlib/lib"
make && make install
会在buildout目录下生成,ffmpeg的静态文件和头文件
问题拓展
- 怎样才能生成我们想要的*.sln文件,还不清楚,大家可以参考ShiftMediaProject, 也许她就是你苦苦寻觅的那个。
- 编译64位的是-arch=x86_64吗?
- 编译如何区分release/debug, 是–disable-debug 吗
最新更新
看了CompilationGuide代码的Wiki之后很多东西又恍然大悟
- msys64 初始化32位或64位环境的时候,直接使用这个vcvarsall.bat 即可
#编译生成64位
vcvarsall.bat amd64
#编译生成 32位
vsvarsall.bat x86
- 如果要加入第三方的库,如zilib,x264,av1等,直接如下操作
set include=%include%;[your absolute path to the zlib folder]
set lib=%lib%;[your absolute path to the zlib folder]
msys2_shell.cmd
- 最终生成32位或者64位的ffmpeg库是由target-os 和arch决定的
./configure --target-os=win64 --arch=x86_64 --toolchain=msvc