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-> Ссылки на / 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 "/ ОТЛАДКА: ПОЛНАЯ / МАШИНА: 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


person Aves    schedule 17.12.2017    source источник
comment
Какие у вас флаги компоновщика?   -  person Ronald S. Bultje    schedule 17.12.2017
comment
Я использую настройки по умолчанию (кроме / OPT: NOREF) для пустого проекта в VS2017. Я добавил связанные флаги в свой qiestion, так как он слишком длинный для комментариев   -  person Aves    schedule 17.12.2017
comment
av_frame_alloc предоставляется библиотекой libavutil (см.   -  person Cornstalks    schedule 17.12.2017
comment
Да, avutil.lib связан с проектом, avutil-56.dll находится в пути и загружается исполняемым файлом (согласно обходчику зависимостей).   -  person Aves    schedule 17.12.2017
comment
Мое лучшее предложение - запустить соответствующие команды cl.exe в терминале или использовать ведение журнала в MSVC, чтобы выяснить, получаете ли вы какие-либо предупреждения или сообщения компилятора или компоновщика. Я предполагаю, что он не связан с тем же avutil, что и то, что вы загружаете, или компилятор не мог найти заголовки (или использовал неправильные) ...   -  person Ronald S. Bultje    schedule 18.12.2017
comment
Вы должны связать библиотеки в правильном порядке.   -  person WLGfx    schedule 19.12.2017
comment
Я попытался перейти на версию 3.4.1, и это устранило идентичную проблему для меня = (   -  person leander    schedule 03.01.2018


Ответы (1)


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

person Prajwal Waingankar    schedule 25.11.2019