可视化C++链接器无法解析 FFmpeg 的外部符号

Visual C++ linker can't resolve FFmpeg's external symbols

本文关键字:FFmpeg 外部 符号 C++ 链接 可视化      更新时间:2023-10-16

我正在制作一个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:UsersThéodocumentsvisual studio 2015ProjectsSparta2Sparta2video.obj   

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

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

提前谢谢你!

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

应确保构建平台与引用的库文件的位数匹配。这个答案有简约的项目,它确实构建得很好,你可以将代码/引用与你使用的内容进行比较,它还在最底部提到了位问题和对答案的注释。