使用ffmpeg时出现了未解决的外部符号问题

3
我刚刚下载了ffmpeg的开发包并设置了头文件和库以供使用。我正在使用Visual C++ 2013,并添加了ffmpeg头文件和库的路径。我链接了ffmpeg lib文件夹中的每个库文件,但显然没有一个匹配av_register_allavformat_open_input
以下是尝试构建时的输出:
1>------ Build started: Project: ffmpeg_learning, Configuration: Debug Win32 ------
1>  ffmpeg_learning.cpp
1>ffmpeg_learning.obj : error LNK2019: unresolved external symbol _av_register_all referenced in function _main
1>ffmpeg_learning.obj : error LNK2019: unresolved external symbol _avformat_open_input referenced in function _main
1>c:\users\edward severinsen\documents\visual studio 2013\Projects\ffmpeg_learning\Debug\ffmpeg_learning.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这是我的代码:
#include "stdafx.h"

extern "C"
{
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
}

#pragma comment(lib, "avcodec.lib")
#pragma comment(lib, "avformat.lib")
#pragma comment(lib, "swscale.lib")
#pragma comment(lib, "avdevice.lib")
#pragma comment(lib, "avutil.lib")
#pragma comment(lib, "avfilter.lib")
#pragma comment(lib, "postproc.lib")
#pragma comment(lib, "swresample.lib")

int main(int argc, char* argv[])
{
    av_register_all();

    AVFormatContext* pFormatCtx = NULL;

    //Open video file
    if (avformat_open_input(&pFormatCtx, argv[1], NULL, 0))
    {
        //Couldn't open the file
        return -1;
    }

    return 0;
}

我不知道我缺少什么。非常感谢任何帮助。谢谢。
1个回答

1
根据提供的信息,我只能给出一般性建议。我将尝试指出它们的相对重要性。
1)VC++ 2013可能有点过时。这很可能是你最小的问题。您可以尝试在Linux或OSX上构建FFMPEG的发布版本,按照顺序进行构建。它在Linux上最容易构建。然后您可以“移植”或复制Windows构建环境中的步骤。您也可以尝试使用MSYS2在Windows上创建模仿Linux的构建环境。
2)确保获取最新的FFMPEG稳定版本。在报告问题时,请确保始终提到版本,并显示ffmpeg命令的输出。
3)基于上述内容,看起来您可能会遇到库版本不匹配的问题。它似乎只找到了两个缺少的符号。VisualC ++应该有像“strings”、“objdump”和“nm”这样的工具,可以让您查看库文件的内容,以查看您是否实际上拥有所需的符号。

1
问题是avformat-58.dll以及其他依赖项没有包含在开发包中。所以我还必须下载共享包以获取额外的库。将这些库添加到程序的 bin 目录后,它开始正常工作。 - Edward Severinsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接