提问人:Edward Severinsen 提问时间:2/27/2018 最后编辑:Iharob Al AsimiEdward Severinsen 更新时间:2/27/2018 访问量:1856
使用 ffmpeg [duplicate] 的未解析外部符号
Unresolved external symbols using ffmpeg [duplicate]
问:
我刚刚下载了 ffmpeg 的开发包,并正在设置头文件和库以供使用。我正在使用 Visual C++ 2013,并添加了 ffmpeg 头文件和库的路径。我链接到 ffmpeg 文件夹中的每个 lib 文件,显然它们都不匹配 和 .lib
av_register_all
avformat_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赞
TalkVideo Network
2/27/2018
#1
根据所提供的信息,我只能提出一般性建议。我将尝试指出它们可能有多重要。
1) VC++ 2013 可能有点过时了。这可能是您最少的问题。您可以随时尝试按此顺序在 Linux 或 OSX 上构建 FFMPEG 版本。它最容易在 Linux 上构建。然后,可以在 Windows 生成环境中“移植”或复制这些步骤。您还可以尝试使用 MSYS2 在 Windows 上创建模拟 Linux 的构建环境。
2)确保获得FFMPEG的最新稳定版本。报告问题时,请确保始终提及版本,并显示 ffmpeg 命令的输出。
3)综上所述,您可能遇到了库版本不匹配的问题。它似乎只找到了两个缺失的符号。VisualC++ 应该有像 “strings”、“objdump” 和 “nm” 这样的工具,这些工具可以让你查看库文件的内容,看看你是否真的有所需的符号。
评论
1赞
Edward Severinsen
2/27/2018
问题是开发包中不包含其他依赖项。因此,我还必须下载共享包才能获得额外的库。将这些库添加到我的程序的 bin 目录后,它开始正常工作。avformat-58.dll
评论