我正在尝试将 C++ 中 ffmpeg 库中的 libavcodec 与 Visual Studio 2017 社区一起使用。我从 zeranoe(版本 20171217)下载了最新的 x64 开发和共享构建,在 Visual Studio 中为 x64 构建设置包含目录和其他库,将共享包中的 DLL 文件添加到我的 PATH。
这是我的示例测试代码:
extern "C" {
#include <libavcodec\avcodec.h>
}
int main() {
avcodec_register_all();
AVFrame *pAvFrame = av_frame_alloc();
av_frame_free(&pAvFrame);
return 0;
}
代码编译没有问题,但是当我运行应用程序时,我看到一个对话框窗口,显示错误消息“av_frame_alloc 的过程入口点无法位于 DLL 中”(实际消息不是英文,这是翻译版本)。
我尝试设置 Linker->Optimization->References to /OPT:NOREF 正如在类似问题中所建议的那样,但它没有帮助。
Dependency walker 显示 av_frame_alloc 已导出,“入口点”未绑定。有点奇怪的是,av_frame_alloc 显示在 avcodec-58.dll(红色)和 avutil-56.dll(绿色)中。也许原因是应用程序试图从 avcodec 而不是 avutil 获取此功能,但我不确定,因为我没有检查这些库的源代码。
那么问题来了,如何在VS2017中建立这样一个简单的基于FFMPEG的C++项目,我错在哪里?
UPD。1.
链接器标志:/OUT:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.exe" /MANIFEST /NXCOMPAT /PDB:"C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pdb" / DYNAMICBASE “c:\work\dev\ffmpeg-20171217-387ee1d-win64-dev\lib*.lib” “kernel32.lib” “user32.lib” “gdi32.lib” “winspool.lib” “comdlg32.lib” “ advapi32.lib""shell32.lib""ole32.lib""oleaut32.lib""uuid.lib""odbc32.lib""odbccp32.lib" /DEBUG:FULL /MACHINE:X64 /OPT:NOREF /PGD:" C:\work\code\TestFfmpeg\x64\Release\TestFfmpeg.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\TestFfmpeg.exe.intermediate.manifest" /OPT :ICF /错误报告:提示 /NOLOGO /TLBID:1