Visual C ++链接器无法解析FFmpeg的外部符号

时间:2016-02-25 20:42:34

标签: c++ ffmpeg

我正在制作一个C ++程序,我想使用为x64预先构建的FFmpeg,这是一个C编译库。 我正在使用此代码以包含其标题:

extern "C" {
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"

    #pragma comment (lib,"G:/Documents/ffmpeg/lib/avcodec.lib")
    #pragma comment (lib,"G:/Documents/ffmpeg/lib/avformat.lib")
}

然后我调用符号就像我为正常函数做的那样,例如用av_interleaved_write_frame(out->formatContext, &packet);

然而,当我尝试使用Visual Studio 2015的内置C ++编译器编译它时,我收到很多错误,如

Error   LNK2019 unresolved external symbol _av_write_trailer referenced in function "void __cdecl closeArenaVideo(struct VideoOutput *)" (?closeArenaVideo@@YAXPAUVideoOutput@@@Z)  Sparta2 c:\Users\Théo\documents\visual studio 2015\Projects\Sparta2\Sparta2\video.obj   

基本上是我所指的任何符号。

我尝试在Visual Studio中导入所有内容,使用命令行进行编译,手动将FFmpeg的库放在默认的库路径中,但没有成功。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

引用链接器错误难以理解的典型问题是在.lib构建中引用错误Win32文件,esp x64平台库的问题,反之亦然。名称可能是正确的,但是集合是错误的,然后链接器接受#pragma引用但忽略内容。

您应确保构建平台与引用的库文件的位数相匹配。 This answer有一个简洁的项目,它可以很好地构建,你可以将代码/引用与你使用的内容进行比较,它也会在最底层提到位数问题并对答案进行评论。