23

我正在尝试在 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 指定为附加库目录。

4

1 回答 1

50

使用 FFmpeg,您可以:

  1. 使用预构建的 .lib/.dll 文件,使用 Visual Studio 生成的二进制文件将依赖于 av*.dll 文件
  2. 使用非 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
  • ETC
  • “开发” ffmpeg-20120726-git-236ecc3-win32-dev.7z:
  • lib/avcodec.lib
  • lib/avutil.lib

“共享”存档具有 FFmpeg 构建的动态链接到 DLL 库。“Dev”存档具有 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”存档解压缩到devVisual 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 构建进行检查。样品和说明保持良好状态。

请注意,Win32Visual Studio 中的构建假定您使用来自 Zeranoe 的 32 位文件。要构建 64 位版本,请分别下载相应的文件并设置 Visual C++ 项目,以进行构建x64(或者,最好同时下载,设置两个配置并分别配置 include/lib 路径)。不匹配位数会导致错误,在下面的评论中提到。

2021 年 7 月 20 日更新:(从下面的评论中提取)Zeranoe 版本不再可用。一个好的且官方认可的替代方案是BtbN 构建的 Windows。本教程需要一个(...)-win64-gpl-shared.zipor(...)-win64-lgpl-shared.zip文件。

于 2012-07-28T14:11:40.150 回答