征服工具链-FFmpeg的编译(Windows 篇)
注:参考自bilibili系列视频,征服工具链-FFmpeg的编译(Windows 篇),更详细的内容可以从视频获取https://www.bilibili.com/video/BV17i4y1G7WA
下载
官网下载msys2, ffmpeg,x264
Autoconf
Autoconf是M4宏处理器的扩展包,用于生成自动构建源码包的脚本。 适用于多种UNIX-like系统。可以使软件包在所有的UNIX-like系统上进行编译。
注:M4 是一个宏处理器.将输入拷贝到输出,同时将宏展开. 宏可以是内嵌的也可以是用户定义的. 除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行Unix命令,整数运算,文本操作,循环等. m4既可以作为编译器的前端也可以单独作为一个宏处理器.
ffmpeg、x264等岁数较大的软件,都用Autoconf构建。由于生成的脚本构建源码的脚本是在UNIX-like系统上进行编译的,我们在windows上编译软件就会很困难,解决方法是,msys2,它可以在windows上模拟一个UNIX-like系统。
为了解决Autoconf的跨平台缺陷,cmake诞生。
MSYS2
MSYS2 (Minimal SYStem 2)主要用于 shell 命令行开发环境。是集成了pacman(包管理工具)和Mingw-w64的Cygwin升级版(Cygwin是一个在windows平台上运行的类UNIX模拟环境), 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。
MSYS2把UNIX-like系统函数转换成 Windows 的 API ,从而实现在windows上执行linux脚本。
安装MSYS2之后,还需要在MSYS2里手动安装Mingw-w64
MinGw 和 cygwin
操作系统提供的系统API是不同的,如Windows使用CreateProcess()创建进程,而Linux使用fork()。所以想要在Windows环境下使用Linux的编译工具,也就是gcc/g++,我们需要一个中间的转换工具或者平台,这也就是MinGW和cygwin存在的原因。
MinGW 是让Windows 用户可以用上GNU 工具,比如GCC,用于编译。
Cygwin 提供完整的类Unix 环境,Windows 用户不仅可以使用GNU 工具,理论上Linux 上的程序只要用Cygwin 重新编译,就可以在Windows 上运行。
即cygwin提供在windows平台上运行的类UNIX模拟环境,MinGw是在windows上使用gcc编译器,提供编译功能。
gcc的输入是源文件,输出是静态库/动态库/可执行文件。
编译x264 和 FFmpeg
编译库时,如果有依赖,且依赖所在目录既有动态库,又有静态库,他会优先选择动态库。静态库,代码会嵌入被依赖库;动态库,在最后运行时,需要把动态库放在运行目录用于引用。
代码量小的习惯生成静态库,代码量大的习惯生成动态库。
编译脚本:
image.png