环境:win10 msys2+msvc编译ffmpeg6.0+h264
技术背景:mingw编译器和msvc编译器编译出来的库互相不兼容。
安装必要的软件:
- msys2安装:
下载包:msys2-x86_64-20230718.exe
注意事项:安装路径全英文路径且不要带空格
尽量不要安装在系统盘,当使用pacman安装包时,安装目录体积会越来越臃肿。 - msys2内装软件:
使用pacman命令安装
# 64位:安装mingw64编译链和基本的依赖
pacman -S mingw-w64-x86_64-toolchain # 64位:mingw64编译工具链,默认选择all
# 32位:安装mingw32编译链和基本的依赖
# pacman -S mingw-w64-i686-toolchain
# 一次可以安装一个或多个软件
pacman -S diffutils make pkg-config yasm
pacman -S base-devel # 一些基本的编译工具
pacman -S yasm nasm # 汇编器
pacman -S diffutils # ffmpeg cmp命令
pacman -S make # 安装GNU make
gcc -v # 查看 gcc 版本
pacman -Qs pkgkeyname 关键字检索已安装的包
修改msys64/msys2_shell.cmd文件
rem set MSYS2_PATH_TYPE=inherit 去掉rem,目的是让msys2继承windows控制台的环境变量
如何启用msys2?
1.msvc编译器:

![在这里插入图片描述](https://img-blog.csdnimg.cn/13299a78c47b41038b478fc300c61b54.png
configure.sh文件内容:
./configure \
--prefix=/usr/local/x264 \
--disable-cli \
--enable-shared \
--enable-pic \
--extra-ldflags=-Wl,--output-def=libx264.def \
--host=mingw32
./configure.sh
make -j4 && make install
lib /def:libx264.def //生成libx264.lib
2. 编译ffmpeg
configure.sh文件内容:
./configure \
--prefix=./build-h264-x86 \
--enable-gpl \
--enable-shared \
--enable-nonfree \
--disable-ffprobe \
--enable-libx264 \
--extra-cflags=-I/usr/local/x264/include \
--extra-ldflags=-LIBPATH:/usr/local/x264/lib \
--pkg-config=pkg-config \
--toolchain=msvc \
./configure.sh
make -j4 && make install
## 如果make出错,可以先执行清除命令,再重新make
## make clean
## make uninstall
集成x264时,常见的错误:
首先,要安装pkg-config,其次,把编译好的x264的pkgconfig文件x264.pc路径添加到PKG_CONFIG_PATH中。
方法:添加windows系统环境变量
source /etc/profile //启用环境变量
怎么知道生效了没有呢?在msys2命令窗口,输入命令:echo $PKG_CONFIG_PATH
如果有配置的路径,就说明生效了。
确认没问题,往下看。
我们通过ffbuild/config.log来查看详细的错误原因。
所以,这里需要的lib文件是libx264.lib 有两个原因:1. 所需lib名字不对,注意检查链接的lib目录下名字是否完全一致,不一致修改一下。2. 链接lib的命令是否写对了,msvc和mingw在configure中链接的书写格式不同。
### FFMpeg支持MinGW以及msvc编译,两者的configure选项在指定链接库的路径时有差异:
msvc:
--extra-ldflags=-LIBPATH:../builds/lib
mingw:
--extra-ldflags=-L../builds/lib
如果使用了错误的编译选项,也会导致x264 not found using pkg-config,即便提供了正确的libx264.lib文件。
64位编译
在msys2中安装mingw64。和上述32位编译过程一样,只是vs2022命令行换成x64 Native Tools Command Prompt for VS 2022,后续启用mingw64位时,输入msys2_shell.cmd -mingw64。