我正在制作一个 C++ 程序,我想使用为 x64 预构建的 FFmpeg,这是一个 C 编译的库。 我正在使用此代码以包含其 header :
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 的库放在默认库路径中,但都没有成功。
提前致谢!
最佳答案
很难从引用的链接器错误中理解的典型问题是引用错误的问题 .lib
文件,特别是 Win32
x64
中的平台库构建,反之亦然。名称可能是正确的,但集合是错误的,然后链接器采用 #pragma
引用但忽略内容。
您应该确保您的构建平台与引用的库文件的位数匹配。 This answer有一个构建良好的简约项目,您可以将代码/引用与您使用的内容进行比较,它还在最底部提到位数问题以及对答案的评论。
关于c++ - Visual C++ 链接器无法解析 FFmpeg 的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35637894/