【问题标题】:Visual C++ linker can't resolve FFmpeg's external symbolsVisual C++ 链接器无法解析 FFmpeg 的外部符号
【发布时间】:2016-06-08 20:27:47
【问题描述】:

我正在制作一个 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 的库放在默认库路径中,但没有成功。

提前谢谢你!

【问题讨论】:

  • 检查 this answer 及其底部与 32/64 库混淆相关的更新,您的情况也可能如此。
  • 非常感谢,确实是这个问题!如果你愿意,你可以做出正确的回答,我会标记为接受。

标签: c++ ffmpeg


【解决方案1】:

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

您应该确保您的构建平台与引用的库文件的位数相匹配。 This answer 有一个简约的项目,它构建得很好,你可以将代码/引用与你使用的进行比较,它还在最底部提到了位数问题,并在答案中提到了 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2016-09-21
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多