编译FFMpeg windows 静态库的基本步骤和注意事项

编译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 

你可能感兴趣的:(FFMpeg)