我正在尝试在Visual Studio 2010中的C ++项目中使用FFmpeg。我想将这些库作为静态链接文件包含在内。 像libavcodec / api-example.c这样的简单程序在错误视图中编译时没有错误,也没有链接器错误。 但是,启动应用程序后出现一个消息框,说avutil-51.dll丢失。 你有什么提示如何解决这个问题?
我使用了http://ffmpeg.zeranoe.com/builds/的最新开发版本。 然后我指定include作为附加包含目录,avcodec.lib; avfilter.lib; avformat.lib; avutil.lib作为额外的依赖关系,lib作为附加的库目录。
用FFmpeg你可以:
您按照上面的第1项建立了您的项目。 你必须使用你的二进制文件来重新分配av * .dll依赖文件才能使它工作。
Zeranoe上的“Static”意味着库被静态链接到像ffmpeg.exe
这样的二进制文件中。 不要混淆这与链接到你的二进制文件的静态.lib
库。 Zeranoe不提供这样的。
在Zeranoe你会发现这样的档案:
bin/avcodec-54.dll
bin/avutil-51.dll
lib/avcodec.lib
lib/avutil.lib
“共享”档案有FFmpeg动态链接到DLL库。 “开发”档案有lib文件,您可以在您的项目中使用它们链接到它们,以ffmpeg.exe共享档案文件的方式。
所以,你的Visual Studio项目可以像这样简单( 在这里浏览完整源代码 ):
extern "C" { // NOTE: Additional directory ..\zeranoe.com\dev\include gets to the files #include "libavcodec\avcodec.h" } // NOTE: Additional directory ..\zeranoe.com\dev\lib gets to the files #pragma comment(lib, "avcodec.lib") // NOTE: Be sure to copy DLL files from ..\zeranoe.com\shared\bin to the directory of // the FFmpegApp.exe binary int _tmain(int argc, _TCHAR* argv[]) { _tprintf(_T("Trying avcodec_register_all... ")); avcodec_register_all(); _tprintf(_T("Done.\n")); return 0; }
您将“Dev”档案文件解压缩到Visual Studio项目的dev
子目录中,并且将在其他包含路径中添加dev\include
。 这将足以构建二进制文件,并将依赖于av*.dll
:
这是当您提取“共享”档案,并将DLL从它的bin
复制到您的二进制文件的目录。 而你的应用程序将从那里工作:
C:\FFmpegApp\Release>FFmpegApp.exe Trying avcodec_register_all... Done.
2016年1月20日更新 :存储库中的项目升级到Visual Studio 2013(旧VS 2010代码),并检查当前Zeranoe生成。 样本和说明保持良好的信誉。
请注意,Visual Studio中的Win32
版本假定您使用Zeranoe的32位文件。 要构建64位版本,请下载相应的文件并分别设置Visual C ++项目,以构建x64
(或者,最好的,同时下载,设置两个配置以及分别配置include / lib路径)。 如果不匹配,会导致错误,在下面的评论中提到。