【问题标题】:Building FFMPEG for Visual Studio development为 Visual Studio 开发构建 FFMPEG
【发布时间】:2016-07-28 11:00:08
【问题描述】:

我正在尝试在 Visual Studio 2013 C++ 软件中使用 ffmpeg(最终作为 OpenCV 项目的一部分)——但现在我只是想获得基本的 FFMPEG 功能。通常,在 Visual Studio 中构建时,我使用多线程 DLL 运行时库构建 64 位软件。我已经使用http://ffmpeg.org/platform.html#Windows 的“使用 ... MinGW-w64 进行本机 Windows 编译”的一般说明构建了 ffmpeg(我在下面提供了一组更详细的步骤...)。

在我的系统上构建 ffmpeg 软件后,我尝试在 Visual Studio 2013 中创建一个简单的“hello world”项目。具体来说,我尝试实现http://dranger.com/ffmpeg/tutorial01.html 提供的初始教程文件。在构建项目时,我收到错误:

c:\msys64\usr\local\ffmpeg\libavutil\common.h(45): 致命错误 C1083: 不能 打开包含文件:'libavutil/avconfig.h':没有这样的文件或目录

以下是我构建 ffmpeg 和创建基本 Visual Studio 项目的详细步骤:

============ 构建ffmpeg ===============

  1. http://msys2.github.io下载并安装msys2-x86_64-20160205.exe
  2. 运行 update-core 以更新 Msys2 安装
  3. pacman -Suu(两次)完成更新(按照有关更新快捷方式等的说明进行操作)
  4. 然后我退出 MSys2 shell 并打开 MinGW-w64 Win64 Shell。在这个新外壳中:
  5. 使用pacman -S <package-name>安装了以下包我安装的包列表是:make、pkg-config、diffutils、mingw-w64-x86_64-yasm、mingw-w64-x86_64-gcc、mingw-w64-x86_64-SDL , 混帐
  6. 然后我进入cd /usr/local
  7. git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
  8. 我想构建这个 MSys64 文件夹的 ffmpeg 库“树外”。因此,在我的 Windows 机器的常规文件系统中,我在 C:\ffmpeg
  9. 创建了一个文件夹
  10. 回到 Win64 Shell,我 cd'd 到这个新文件夹:cd /c/ffmpeg
  11. 然后跑/usr/loca/ffmpeg/configure --enable-shared
  12. 然后make -r
  13. 最后是make install

现在,如果我不得不猜测,我的“缺陷”就在我调用 ffmpeg 的“配置”脚本时使用的选项中。我是否需要使用特定选项才能获取此处构建的 ffmpeg 库并将它们用作 Visual Studio 中的动态 (DLL) 库?

========== 配置我的 Visual Studio 项目 ============

这是我在 Visual Studio 中创建一个简单的 hello world 项目以查看 ffmpeg 是否正常工作的方法。

  1. 我在 Visual Studio 2013 中创建了一个新的 Visual C++“空项目”
  2. 然后我将项目属性配置如下:

    一个。在 C/C++ => General => Additional Include Directories 中,我放了

    C:\msys64\usr\local\ffmpeg

    b.在 Linker=>General => Additional Library Directories 中,我指向了每个已构建的库文件夹(基本上我指向所有已构建的库,以确保我不会无意中错过关键的库) .名单如下:

    • C:\ffmpeg\libavcodec
    • C:\ffmpeg\libavdevice
    • C:\ffmpeg\libavfilter
    • C:\ffmpeg\libavformat
    • C:\ffmpeg\libavutil
    • C:\ffmpeg\libswresample
    • C:\ffmpeg\libswscale
    • C:\ffmpeg

    c。在 Linker=> Input => Additional Dependencies 中,我指向了特定的库(同样——我指向了所有存在的库)。名单是:

    • avcodec.lib
    • avdevice.lib
    • avfilter.lib
    • avformat.lib
    • avutil.lib
    • swresample.lib
    • swscale.lib
  3. 然后我创建了一个名为“tut01.c”的新源文件,并从http://dranger.com/ffmpeg/tutorial01.c复制/粘贴了代码

  4. 然后按 F7 并得到上面指定的关于找不到 avconfig.h 的错误

以上是我对在 Windows(顺便说一句,它是 Windows 10、64 位)和 Microsoft Visual Studio 2013 中工作所需遵循的步骤的最佳猜测。我应该改变什么来获得这个基本程序构建并运行?

【问题讨论】:

  • 如果找不到头文件,编译器会抱怨包含目录有问题。目前与链接器或外部库无关。所以去项目属性页 -> 配置属性 -> VC++ 目录 -> 包含目录,添加你的标题目录。
  • @halfelf 感谢您的提示。问题是(我应该在我的帖子中提到这一点)我的 libavutil 文件夹中不存在 avconfig.h 标头。这就是为什么我认为我错误地配置了 ffmpeg 构建。
  • 我明白了,很抱歉没有仔细阅读。在这种情况下,您可以简单地从 ffmpeg 源目录中找到并将其复制到应有的位置。但是,传统上,我们使用“--prefix=dir”选项配置这些库,以便所有库和头文件在构建后都在前缀目录中。

标签: c++ visual-studio-2013 ffmpeg


【解决方案1】:

@halfelf,感谢您的回复。他们让我再次查看我的文件,我意识到我指向包含(和 lib)文件的错误位置。事实证明,在构建 ffmpeg 时,它放置在横向文件夹 /usr/local/include/usr/local/bin 中,我猜是一组更完整的包含和库文件(包括 avconfig.h!)我将我的 Visual Studio 项目属性更新为指向解决该问题的这些文件夹。

但后来,我遇到了一个新的问题,'PIX_FMT_RGB24' 没有被识别。但是,我认为这与我使用的教程文件过时有关。我可以删除那些(和相关的)行,代码将构建和执行(尽管它没有做太多,因为删除了“钱”行代码)。但至少 ffmpeg 的基本功能似乎正在发挥作用。

【讨论】:

  • PIX_FMT_xxx 是旧的宏名称,改为AV_PIX_FMT_xxx。检查libavutil/pixfmt.h 以获取可用的像素格式宏。
  • @halfelf 谢谢!这就是问题所在。做了一个替换,Tut01 现在编译并运行了!!
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多