这是一个旧帖子,几乎解决了。顺便说一句,我遇到了这个问题,我花了很多时间来解决这个问题
undefined reference to av_register_all
我使用的是 Qt Creator 5.3.2,这是我的 MYPROJECT.pro 文件
MYPROJECT.pro
QT += core
QT -= gui
TARGET = MYPROJECT
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
QMAKE_CXXFLAGS += -D__STDC_CONSTANT_MACROS
LIBS += -LC:\ffmpeg-20151219-git-2dba040-win32-dev\lib
LIBS += -lavcodec -lavformat -lavutil -lswscale
INCLUDEPATH +=C:\ffmpeg-20151219-git-2dba040-win32-dev\include
建议从头开始构建 ffmpeg,但如果你是在 windows 上,如果你不愿意编译这个杰作,那么恭喜!你和我一样!去预建 zereanoe 并下载最新的共享和开发 win-32 版本。将后两个包解压到路径中没有空格的地方,即我的在:C:\ffmpeg-20151219-git-2dba040-win32-dev
我建议不要重命名主文件夹,因为它信息量很大。通过以下代码行将 [PATH TO ffmpg-YYYYMMDD-git-win32-dev]/include 的 include 文件夹设置为你项目的搜索空间:
INCLUDEPATH +=C:\ffmpeg-20151219-git-2dba040-win32-dev\include
您还应该将 [PATH TO ffmpeg-YYYYMMDD-git-win32-dev]/lib 中的库用于您的项目,如下所示:
LIBS += -LC:\ffmpeg-20151219-git-2dba040-win32-dev\lib
LIBS += -lavcodec -lavformat -lavutil
您可以调用 lavcodec、lavformat 和 lavutil 以外的库。在您的 cpp 文件中,您应该将与 ffmpeg 对应的标头包含在 extern "C" 块中。
最后一步是将所有的dll文件添加到你最近下载的ffmpeg的共享版本中。
复制 *.dll 内的文件
[PATH TO ffmpeg-YYYYMMDD-git-2dba040-win32-shared]/bin
并将它们粘贴到您的可执行文件所在的任何位置。例如,我的项目位于 C:/QtProjects/MYPROJECT,那么我的二进制文件位于:
C:/QtProjects/build-MYPROJECT-Desktop_Qt_5_3_MinGW_32bit-Debug
现在,将所有 dll 复制到项目的调试或发布文件夹中。
- 我的 main.cpp
这是我的 main.cpp:
main.cpp
#include <iostream>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
}
using namespace std;
int main(int argc, char *argv[])
{
cout<<"I have included FFMPEG in my project"<<endl;
av_register_all();
cout<<"If everything goes well you will see ME"<<endl;
return 0;
}