2016-02-25 93 views
1

我正在制作一个C++程序,我想使用FFmpeg预先为x64编译,这是一个C编译库。 我使用这个代码,以包含它的头:Visual C++链接器无法解析FFmpeg的外部符号

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 *)" ([email protected]@[email protected]@@Z) Sparta2 c:\Users\Théo\documents\visual studio 2015\Projects\Sparta2\Sparta2\video.obj 

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

我试图在Visual Studio中导入一切,用命令行编译,手动将FFmpeg的库放到默认库路径中,但没有成功。

预先感谢您!

+0

检查[这个答案](http://stackoverflow.com/a/11701737/868014)和它的底部更新有关32/64 lib混淆,它可能也是你的情况。 –

+0

非常感谢,确实是这个问题!如果你愿意,你可以做出正确的答案,我会将其标记为已接受。 – JustPingo

回答

1

从引用的链接器错误中很难理解的一个典型问题是引用了错误的.lib文件,尤其是x64构建中的平台库,反之亦然。名称可能是正确的,但该设置是错误的,然后链接器采取#pragma引用,但忽略内容。

您应该确保您的构建平台与引用库文件的位数相匹配。 This answer有简单的项目,它建立得很好,你可以比较代码/参考与你使用的东西,它也提到了位的问题,以及在答案的最底部和评论。

相关问题