这几天一直捣鼓这个,configure/make了无数次,花了这么多功夫,总得记录一下。
以Win10 64位系统为例。
实现步骤
安装msys2
- 建议去官网下载
- 安装完毕之后,可以直接调用pacman安装其它所需的东西,不用再东一个西一个到处找了。
- 假设安装路径
D:\Work\msys64\
为pacman更换国内镜像源
-
打开
D:\Work\msys64\etc\pacman.d\
- 编辑
mirrorlist.mingw32
,在文件开头添加:Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686 Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
- 编辑
mirrorlist.mingw64
,在文件开头添加:Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64 Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
- 编辑
mirrorlist.msys
,在文件开头添加:Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
- 然后执行
pacman -Sy
刷新软件包数据即可。
安装前置环境
- 运行D:\Work\msys64\msys2_shell.cmd,在弹出的shell窗口中执行
pacman -S make yasm nasm diffutils pkg-config pacman -S gcc base-devel vim pacman -S mingw-w64-i686-gcc pacman -S mingw-w64-x86_64-gcc pacman -S mingw-w64-x86_64-toolchain pacman -S mingw-w64-i686-toolchain
MSYS2编译FFmpeg(以64位为例)
- 写在前面:
用Msys2生成的库有依赖,例如直接运行生成的static的ffmpeg.exe会报错。
此时,依赖的库基本上位于D:\Work\msys64\mingw64\bin 或 D:\Work\msys64\mingw32\bin
我在编译的时候试了一下,需要将libwinpthread-1.dll和ffmpeg.exe打包在一起才能正常运行。
- 编译
- 先打开cmd窗口
cd D:\Work\msys64\ msys2_shell.cmd -mingw64
- 打开mingW32 shell后,cd 到ffmpeg所在目录
./configure --enable-static --disable-shared --disable-everything --enable-decoder=h264 --enable-parser=h264 --arch=x86_64 make make install
- 你可以在ffmpeg目录或者D:\Work\msys64\usr\local\bin\找到已经编译的东西
- 先打开cmd窗口
VS2015编译FFmpeg(以32位为例)
- 写在前面
- 假设电脑已经安装了Visual Studio
- VS2015不需要,但是低版本的VS可能需要C99-to-C89 Converter & Wrapper,参见此处
- 重命名link.exe
- 将D:\Work\msys64\usr\bin\link.exe改名,防止和MSVC的link.exe抵触。
- 设置环境变量
- 系统环境变量Path添加3个位置:
## 第一个位置先找到VS安装位置,然后下面有很多路径,根据当前设备与目的设备的情况决定 ## D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\ D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_x86 ## 第二个位置没啥好说的 D:\Work\msys64\usr\bin\ ## 第三个参数取决于mingW调用的是哪个窗口 ## msys2_shell.cmd -mingw64 / mingw32 D:\Work\msys64\mingw32\bin
- 系统环境变量Path添加3个位置:
- 配置msys2_shell.cmd
- 编辑D:\Work\msys64\msys2_shell.cmd
在@echo off后面的第二行插入VC的配置脚本,插入哪一个取决于当前设备与目的设备的情况: rem call "D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat" call "D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_x86\vcvarsamd64_x86.bat" 找到set MSYS2_PATH_TYPE=inherit所在行,去掉注释rem
- 编辑D:\Work\msys64\msys2_shell.cmd
- 在编译前的检查
- 先打开cmd窗口
cd D:\Work\msys64\ msys2_shell.cmd -mingw32
- 打开mingW32 shell后
which cl link yasm cpp #显示如下内容 /d/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/amd64_x86/cl /d/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/amd64_x86/link /usr/bin/yasm /mingw32/bin/cpp
- 如果不符,请重启电脑试一试,可能环境变量尚未生效。
- 先打开cmd窗口
- 编译
- 先打开cmd窗口
cd D:\Work\msys64\ msys2_shell.cmd -mingw32
- 打开mingW32 shell后,cd 到ffmpeg所在目录
./configure --toolchain=msvc --arch=x86_64 --enable-yasm --enable-asm --disable-debug --disable-doc --disable-ffplay --disable-ffprobe --enable-static --disable-shared --disable-everything --enable-decoder=h264 --enable-parser=h264 make make install
- 先打开cmd窗口
可能的坑
很多都放到具体的步骤里面了,那些趟过的雷就不说了
- 尝试不同工具编译前,先确保ffmpeg的目录是干净的,不要有上一款操作的残留
- 在由msys2转为msvc时头铁浪费了很多时间,好气啊
- msvc编译时,为了能够编译成功,需要注释掉cmdutils.c中CC_IDENT所在的行
- 如果ffmpeg下载很慢,不妨尝试使用码云新建一个repo镜像,然后下载