3

我正在尝试将 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

4

1 回答 1

0

尝试下载 .exe 文件(程序)的 32 位版本。这为我解决了 Postman.exe 的问题

于 2019-11-25T11:00:58.687 回答