Ошибка времени выполнения при связывании библиотек ffmpeg в qt creator
Я довольно новичок здесь, но я слышал, что если вы хотите получить ответ на вопрос, именно здесь можно задать stackru>.<. Поэтому я надеюсь, что мой вопрос не слишком тривиален, так что все будут раздражены моим отсутствием исследований (я уже два дня пробовал гуглить, D = нет прогресса!) Я также задавал этот вопрос на форумах Qt, но я решил спросить и здесь.
так...
Последние несколько дней я возился с opengl и т.п., пытаясь написать видеоплеер.
Однако, когда я пытаюсь импортировать библиотеки ffmpeg (avcodec, avformat, avutils и т. Д.), Во время выполнения возникает ошибка (программа компилируется нормально). При компиляции и запуске в режиме отладки сообщение об ошибке дает мне только адрес памяти и код ошибки 135 (DLL не найдена).
Эта ошибка возникает, когда я включаю функцию из этих библиотек в мой код (например, av_register_all()), и это происходит независимо от того, вызывается ли функция на самом деле.
Так что я думаю, что я делаю что-то не так, когда связываю эти библиотеки. В настоящее время я использую: Windows Vista (32bit), Qt Creator 2.4.1 на основе Qt 4.7.4 (32bit), Zeranoe's FFmpeg build git-3233ad4 (2012-06-30)
Мой.pro файл состоит из:
QT += core gui opengl
TARGET = test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
glwidget.cpp
HEADERS += mainwindow.h \
glwidget.h \
FORMS += mainwindow.ui
LIBS += -L"$$_PRO_FILE_PWD_/libraries/ffmpeg/libs/" -lavcodec -lavformat -lavutil
INCLUDEPATH += libraries/ffmpeg/includes
Я перепробовал много вариантов строки LIBS += и много раз проверял мой путь к файлу. Тем не менее, DLL не найдена ошибка возникает во всех этих вариаций =(.
Есть ли что-то, что я забываю, когда делаю это?
Заранее спасибо>.<, (Молодой и наивный) начинающий разработчик
1 ответ
Поскольку ошибка говорит о том, что DLL не найдена, и это происходит, когда вы включаете функции ffmpeg, это означает, что библиотеки ffmpeg динамически связаны (то есть они являются DLL). Это означает, что для того, чтобы ваш exe-файл работал, он должен загрузить DLL-библиотеки ffmpeg. Вы должны иметь эти DLL в той же директории, что и ваш exe-файл. Скопируйте их туда. Используйте средство обхода зависимостей, чтобы увидеть, какие DLL вам нужно скопировать, но они должны выглядеть примерно так avcodec-52.dll, avdevice-52.dll, avformat-52.dll, avutil-49.dll
и, возможно, еще несколько, в зависимости от вашей сборки ffmpeg.