我试图使用FFmpeg的一个C ++项目在Visual Studio 2010中我想包括在库,静态链接文件。 喜欢简单的程序的libavcodec / API-example.c无错地编译和启动时,它们会出现在错误视图中没有连接错误。 然而,一个消息框,启动应用程序,说avutil-51.dll丢失后显示出来。 你有关于如何解决这个问题的任何提示?
我使用了最新开发构建http://ffmpeg.zeranoe.com/builds/ 。 然后我指定包括作为附加包括目录,avcodec.lib; avfilter.lib; avformat.lib; avutil.lib作为附加的依赖性和IIb作为附加库目录。
随着FFmpeg的,您可以:
- 使用与Visual Studio生成预建的.lib / .dll文件和二进制文件将依赖于AV * .dll文件
- 从源代码到使用非Microsoft编译静态库编译FFmpeg的,然后链接到您的Visual Studio项目(介意在这种情况下,LGPL / GPL许可证)
您开发项目按上述第1项。 你必须使用和重新发布AV * .DLL相关文件与你的二进制文件有它的工作。
在“静态” Zeranoe意味着库静态链接到像二进制文件ffmpeg.exe
。 不要用静态混淆.lib
链接到你的二进制库。 Zeranoe不提供这些服务。
在Zeranoe你会发现这样的档案:
- “共享” 的ffmpeg-20120726-GIT-236ecc3-Win32的shared.7z:
-
bin/avcodec-54.dll
-
bin/avutil-51.dll
- 等等
- “开发” 的ffmpeg-20120726-混帐236ecc3-Win32的dev.7z:
-
lib/avcodec.lib
-
lib/avutil.lib
“共享”档案已建成的FFmpeg动态链接DLL库。 “开发”档案库,你可以在你的项目中使用,以在ffmpeg.exe确实在共享档案的方式,以及链接到这些LIB文件。
所以,你的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\include
在附加包含路径。 这将足以构建二进制,这将是依赖于av*.dll
:
这是当你提取“共享”的存档,并从它复制的DLL bin
到您的二进制文件的目录。 和你的应用程序会从那里工作:
C:\FFmpegApp\Release>FFmpegApp.exe
Trying avcodec_register_all... Done.
2016年1月20日更新 :在存储库中的项目升级到Visual Studio 2013(旧的VS 2010码),并针对当前Zeranoe建立检查。 样本和说明保持良好的信誉。
需要注意的是Win32
建立在Visual Studio中假设你从Zeranoe使用32位的文件。 为了建立64位版本,下载各个文件和分别设置Visual C ++项目,建立x64
(或,最好,同时下载,设置两个配置和分别构成包括/ lib中路径)。 匹配失败位数将导致错误,在下面的评论中提到。