Libavcodec "ошибка точки входа процедуры для av_frame_alloc не может быть найдена" в проекте Visual Studio 2017 C++

Я пытаюсь использовать libavcodec из библиотеки ffmpeg в C++ с сообществом Visual Studio 2017. Я загрузил последнюю версию x64 dev и общие сборки из zeranoe (версия 20171217), настроил включающие каталоги и дополнительные библиотеки в 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, как было рекомендовано в аналогичных вопросах, но это не помогло.

Обходчик зависимостей показывает, что av_frame_alloc экспортируется, "точка входа" не привязана. Немного странно, что av_frame_alloc отображается как в avcodec-58.dll (красным), так и в avutil-56.dll (зеленым). Возможно, причина в том, что приложение пытается получить эту функцию из avcodec вместо avutil, но я не уверен, так как я не проверял исходный код этих библиотек.

Так что вопрос в том, как настроить такой простой C++ проект на основе FFMPEG в VS2017, где я ошибаюсь?

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" / ОТЛАДКА: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 /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

0 ответов

Попробуйте скачать 32-битную версию.exe файла (программы). Это решило проблему для меня с Postman.exe

Другие вопросы по тегам