用msys2与msvc编译FFmpeg

简介: 本文讲解如何使用 msys2 + msvc 来编译 FFmpeg ,msys2 的安装请看 《MSYS2介绍》。

本文讲解如何使用 msys2 + msvc 来编译 FFmpeg ,msys2 的安装请看 《MSYS2介绍》

下面开始操作,先找到 x64 Native Tools Command Prompt for VS 2019 这个命令工具,点击它打开命令行,如下:

这样打开的命令行 是有 vs2019 的环境变量的,如下图:

千万不要用下面这种 win+R 的方式打开命令行,这样子打开命令行是没有 vs2019 的环境变量的。



为了让 msys2 能继承 vs2019 的环境变量,需要修改 C:\msys64\msys2_shell.cmd 中的 rem set MSYS2_PATH_TYPE=inherit,去掉rem,取消这⼀句的注释。使MSYS2的环境变量继承当前CMD的窗口的环境变量。

提醒:FFmpeg-4.4.1 版本已经不需要 重命名 C:/msys64/usr/bin/link.exeC:/msys64/usr/bin/link.bak , 避免和MSVC 的 link.exe 抵触。早期的版本可能需要。因为在 configure 里面编译的时候,调用的是 ./compat/window/mslink ,如下:

./compat/window/mslink 代码
#!/bin/sh
LINK_EXE_PATH=$(dirname "$(command -v cl)")/link
if [ -x "$LINK_EXE_PATH" ]; then
    "$LINK_EXE_PATH" $@
else
    link.exe $@
fi
exit $?

上面是 mslink 的代码,可以看到,他的逻辑就是优先 使用 跟 cl.exe 同目录下的 link.exe。cl.exe 只有在vs2019 那里才有,C:/msys64/usr/bin 目录下没有 cl.exe,所以会优选使用 vs2019 里面的link.exe,所以不重命名 C:/msys64/usr/bin/link.exe 也没关系。


在 x64 Native Tools Command Prompt for VS 2019 命令窗口输入 cd c:\msys64\ 先回到 msys64目录。

然后再输入 .\msys2_shell.cmd -mingw64,启动 msys2 命令行窗口,如图:

提醒:-mingw64 是指使用 64 位的 gcc 环境,但是本文不使用 gcc 编译器,用的是 MSVC 编译器。

由于上面使用 x64 打开的命令行窗口,所以使用的是 msvc 64 位的编译器,如果需要使用 32 位的 msvc ,要用 x86 Native Tools Command Prompt for VS 2019 打开 msys2 环境。

#回到 MSYS2 的安装目录
cd c:\msys64\
#启动 msys2 命令行
.\msys2_shell.cmd -mingw64

在 msys2 命令行窗口 输入 echo $LIB ,可以看到 msys2 命令行窗口 已经继承了 vs2019 的 lib 环境变量。

再输入一下 which cl.exe ,确认一下 cl.exe 是在vs2019的目录下,同时看下 cl.exe 的目录是否有 link.exe。


MSYS2 + MSVC 环境已经准备好了,MSYS2 命令行已经继承了 vs2019 的环境变量,下面开始编译 FFmpeg。

1,上 Github 下载 FFmpeg-n4.4.1.zip 代码,放到 C:\msys64\home\loken\ffmpeg 目录,如下图:

2,回到 msys2 命令行窗口,安装所需软件,命令如下:

pacman -S diffutils make pkg-config yasm

3,进入 FFmpeg-n4.4.1 源码目录

cd /home/loken/ffmpeg/FFmpeg-n4.4.1

4,执行 configure ,如下:

./configure \
--prefix=/home/loken/ffmpeg/build64/ffmepg-4.4-msvc \
--enable-gpl \
--enable-nonfree \
--enable-shared \
--disable-optimizations \
--disable-asm \
--disable-stripping \
--toolchain=msvc
make -j8
# 要执行 make install
make install

5,编译完成之后,ffmepg-4.4-msvc 目录如下:

在 configure的时候 我故意使用了 --enable-shared 开启了编译动态库,所以生成了 一堆的 lib 跟 dll 文件。

上面的流程中,需要执行 make install, 因为 install 这个操作会把 exe 跟 dll 复制到同一个目录,这样才能运行。


这些 lib 跟 dll 都是可以被 MSVC 使用的,他们本身就是 msvc 编译出来的。具体试用,可以参考《用msys2与mingw编译FFmpeg》最后的 ffmpeg-test 的 version.exe 程序,使用方法是一样的。

相关阅读:

1,《官方MSVC编译FFmpeg》



目录
相关文章
|
1月前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(三)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(三)
21 0
|
5天前
|
Linux
Linux编译FFmpeg
Linux编译FFmpeg
12 0
|
5天前
|
Ubuntu Linux Shell
Android-NDK-clang 编译 FFmpeg
Android-NDK-clang 编译 FFmpeg
14 0
|
6天前
|
移动开发 Unix Linux
ffmpeg编译so
ffmpeg编译so
13 0
|
1月前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
15 0
|
4月前
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
84 0
|
8月前
|
C++ Windows
FFmpeg入门及编译 3
FFmpeg入门及编译
57 0
|
8月前
|
编解码 API 开发工具
FFmpeg入门及编译 1
FFmpeg入门及编译
101 0
|
1月前
|
编解码 IDE 开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(一)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(一)
23 1
|
8月前
|
API C语言 C++
FFmpeg入门及编译 2
FFmpeg入门及编译
91 0