2

我正在尝试围绕 libavformat 构建一些视频阅读代码。在这里获得编译好的 DLL 和.lib文件后,我去构建我的代码,即使我已经链接到提供的文件中,链接器也找不到任何 libavformat 符号 。.lib

检查libavformat.lib显示dumpbin -headers它使用下划线前缀导出所需的函数。例如,当我想调用avformat_open_input时,.lib 文件给出了_avformat_open_input.

为什么会这样,为什么我不能链接预编译的 dll?

4

3 回答 3

8

您需要执行以下所有任务才能libav使用MSVC++. 首先转到Zeranoe

  1. 下载版本,从文件夹Shared中复制所有文件并将它们粘贴到将生成的输出目录中。.dllbinexe
  2. 下载版本,从文件夹Developer中复制所有文件并将它们粘贴到您的主 c++ 文件所在的位置(例如,文件在哪里,所以您必须将文件放入).liblibFolder-1\Folder-2Folder-1.sln.libFolder-2
  3. Developer您在步骤 2 中下载的版本中复制文件夹中的所有目录include并将它们粘贴到 Folder-2 中(请参阅步骤 2 中有关 Folder-2 的详细信息)
  4. 下载inttypes.hstdint.h,将其保存在此位置C:\Program Files\Microsoft Visual Studio 10.0\VC\include\文件夹中。
  5. 要包含头文件,请使用以下语法

你必须使用它extern,因为libav它是一个C库。

extern "C" {
    #include "libavcodec/avcodec.h"
    #include "libavdevice/avdevice.h"
    #include "libavfilter/avfilter.h"
    #include "libavformat/avformat.h"
    #include "libavutil/avutil.h"
}
于 2012-08-23T09:23:30.733 回答
0

获取 32 位库,你应该没问题 :) 你的应用程序平台必须匹配使用的库(反之亦然)。

于 2012-07-02T22:30:04.860 回答
0

将其编译为 .lib 静态库怎么样?

于 2012-10-30T08:00:10.937 回答