Ошибка времени выполнения при связывании библиотек 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.

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