Я пытаюсь использовать 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
av_frame_alloc
предоставляется библиотекой libavutil (см. - person Cornstalks   schedule 17.12.2017