在Visual Studio中构建编译FFmpeg
项目背景
FFmpeg项目的默认构建链使用标准的gnu autotools(对于gnu开源项目来说是很好的标准)。对于经常在linux上进行编译的人员来说,configure和make的使用可能相当熟悉,但是对于许多Windows开发人员而言,这些似乎有些陌生。事实是,要在Windows上使用这些工具,需要设置一个MSYS / Cygwin环境,这通常说起来容易做起来难。即使在此之后,大多数使用此环境的构建链都需要基于gcc的编译器,在Windows上该编译器为MinGW。 gcc是一个很好的编译器,但是MinGW可能会遇到一些问题(在Windows这个特定环境下才会出现),这可能会使它不太理想。
FFmpegs默认构建工具当前确实已经支持在msvc(Microsoft C编译器)中进行本机编译,甚至可以将C99 FFmpeg代码转换为与msvc兼容的C89代码。但这仍然需要设置MSYS Shell,并且其他FFmpeg依赖的项目没有同步提供对msvc的支持。
因此,只要配置/生成构建链功能强大,就可以说出您对msvc编译器的满意程度(我同意其标准合规性非常糟糕),但是对于那些希望在具有Visual Studio支持的Windows开发的人来说,这是最简单,最可靠的方法。由于FFmpeg不会维护本地的Visual Studio构建链(我不能责怪他们不想这样做),对此我很不爽,因此决定自己解决这个问题。
项目实施
假期的空闲时间是我写了一个FFmpeg Visual Studio项目生成器。这是一个简单的软件,它将扫描现有FFmpeg的configure / make文件,然后使用它们动态生成可用于本地编译FFmpeg的Visual Studio项目文件。该程序不仅构建项目文件,还将基于原始配置脚本中找到的规则和任何传入的参数的组合动态生成配置文件。实际上,生成器除了具有许多与configure脚本相同的配置参数外,还可以对启用/禁用的内容进行微调控制。
命令行选项示例:
ffmpeg_generator.exe --enable-gpl --enable-bzlib --enable-iconv
--enable-zlib --disable-encoders --enable-encoder = vorbis
该程序不支持configure脚本的所有选项,但它支持其中的许多选项,并且在某些情况下实际上比原始选项提供更多的选项。config.h文件中显示的任何选项都可以通过命令行手动启用/禁用。即使设置了无效的选项,生成器也会使用原始构建脚本中发现的所有内置配置检查来自动验证每个设置。不支持某些选项(例如32 / 64bit),主要是因为它们不相关,因为生成的config.h文件可用于32/64位,甚至可以检测并启用内联asm(只要Intel编译器支持)。
#define ARCH_X86 1
#if defined( __x86_64 ) || defined( _M_X64 )
# define ARCH_X86_32 0
#else
# define ARCH_X86_32 1
#endif
所有这些都是动态发生的,因此对于那些直接下载整个工程的人来说,您只需要重新运行生成器程序,它将自动检测任何更改(新增/删除文件,配置更改,新增/删除选项等等),并相应地生成一个新项目。
现在,我要指出的是,此生成器已经被放在工程里面了,虽然它的代码并不十分出色,但可以完成工作。它支持所有当前的其他依赖关系,但并非全部都经过检查,并且在库命名方面具有某些*。这是因为许多依赖库没有一致的命名约定,因此包含生成的项目使用的链接可能与要链接的实际文件并不完全相同。如果发生这种情况,那么您只需要手动调整include选项中的文件名即可,因为没有任何命名一致性,在这里就不多说了。
默认情况下,生成器还会生成具有默认Intel编译器设置的项目。那些没有Intel编译器的人如果想将其设置回标准msvc,则可能必须在项目属性中更改一些设置。由于Visual Studio 2012不支持足够的C99功能来编译FFmpeg,因此选择Intel作为默认选项,只能将Intel编译器与2012一起使用来构建项目。对于使用Visual Studio 2013的用户,默认编译器添加了足够的C99,使其能够正常工作,但目前生成器默认构建为2012。可以在2012/2013中加载同一项目,而所有项目都需要加载。使用的编译器已更改。如果有足够的兴趣,我可以在生成器中添加一个选项,以允许人们在生成时指定他们是否需要Intel编译器支持,与此同时,您只需要在项目属性中更改构建工具即可。
更新: 生成器的当前版本允许指定将在输出项目文件中用作默认编译器。当然也可以在生成项目后直接在项目中对其进行更改,但是为了方便起见,生成器现在可以处理“工具链”选项。使用FFmpeg的较新修补程序,Visual Studio 2013可以毫无问题地对其进行编译。对于默认的Microsoft编译器,toolchian参数可以用“ msvc”,对于支持嵌入式汇编的Intel编译器也可以用“ icl”。
ffmpeg_generator.exe --toolchain = msvc
项目生成器可以在下面下载链接的压缩包中找到。还包含一个使用以下命令选项构建的预构建项目:
ffmpeg_generator.exe --enable-gpl --enable-version3 --enable-avisynth
--enable-nonfree --enable-bzlib --enable-iconv --enable-zlib
--enable-libmp3lame --enable-libvorbis --enable-libspeex
--enable-libopus --enable-libfdk-aac --enable-libtheora
--enable-libx264 --enable-libxvid --enable-libvpx --enable-libmodplug
--enable-libsoxr --enable-libfreetype --enable-fontconfig
--enable-libass --enable-openssl --enable-librtmp --enable-libssh
项目分享
默认项目包括已libcdio,libbluray,opengl,opencl和sdl。经过测试,将启用更多功能。所有这些依赖项都可以在下面文件目录中找到有效的Visual Studio项目。
您可以*使用该项目,因为我会持续更新。
下载链接:
FFmpeg-4.4.r101298
libffmpeg_4.4.r101298_msvc14_x86.zip
libffmpeg_4.4.r101298_msvc14_x64.zip
推荐阅读
-
在Visual Studio 2008 SP1 中调试ASP的图文教程
-
在Visual Studio 2019中开启预览功能
-
Visual Studio 2017中找回消失的“在浏览器中查看”命令
-
VS2017安装后怎么删除右键菜单"在Visual Studio中打开"项?
-
在Ubuntu系统中安装Visual Studio Code的教程
-
[原创]c/c++在vc6,vs(visual studio2010),codeblocks,wxDev c++中应用sqlite3 API笔记
-
windows下使用Visual Studio编译可以调试的FFmpeg
-
在Android Studio中使用cmake编译FFmpeg
-
Android FFmpeg源码编译及在Android studio的集成
-
彻底关闭鼠标右键的 “在visual studio中打开”