我无法在QT中使用ffmpeg.
我的步骤:
-1.正常编译ffmpeg
-2.在QT .pro中添加lib/include路径
LIBS += -L/home/kim/ffmpeg/lib -lavcodec -lavformat
INCLUDEPATH += /home/kim/ffmpeg/include
Run Code Online (Sandbox Code Playgroud)
-3.在代码中
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
Run Code Online (Sandbox Code Playgroud)
并只调用一个名为av_register_all()的函数;
然后我得到了以下bulid问题<许多函数undefined reference>
in function `rl2_read_packet`: undefined reference to `av_free_packet`
in function `av_register_all`: ....
Run Code Online (Sandbox Code Playgroud)
我搜索问题的解决方案,但不适合我.
还有其他方法吗?谢谢.
Dav*_*ati 11
这是一个老帖子,几乎解决了.顺便说一句,我遇到了问题,我有很多时间在努力
undefined reference to av_register_all
Run Code Online (Sandbox Code Playgroud)
我正在使用Qt Creator 5.3.2,这是我的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
Run Code Online (Sandbox Code Playgroud)
建议从头开始构建ffmpeg,但是如果你在windows上,如果你不愿意编译这个杰作,那么恭喜!你跟我一样!选择预先构建的zereanoe并下载最新的共享版和dev 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
Run Code Online (Sandbox Code Playgroud)
您还应该在[PATH TO ffmpeg -YYYYMMDD-git-win32-dev]/lib中使用库到您的项目,如下所示:
LIBS += -LC:\ffmpeg-20151219-git-2dba040-win32-dev\lib
LIBS += -lavcodec -lavformat -lavutil
Run Code Online (Sandbox Code Playgroud)
您可以调用lavcodec,lavformat和lavutil以外的库.在你的cpp文件中,你应该在extern"C"块中包含对应于ffmpeg的头文件.
最后一步是在最近下载的ffmpeg的共享版本中添加所有dll文件.复制*.dll文件
[PATH TO ffmpeg-YYYYMMDD-git-2dba040-win32-shared]/bin
Run Code Online (Sandbox Code Playgroud)
并将它们粘贴到可执行文件所在的位置 Fo实例,我的项目位于C:/ QtProjects/MYPROJECT,然后我的二进制文件位于:
C:/QtProjects/build-MYPROJECT-Desktop_Qt_5_3_MinGW_32bit-Debug
Run Code Online (Sandbox Code Playgroud)
现在,将所有dll复制到项目的调试或发布文件夹中.
#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;
}
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,它使用以下技巧.
在代码cpp源码中:
#define __STDC_CONSTANT_MACROS
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
Run Code Online (Sandbox Code Playgroud)
在你的.pro文件中:
LIBS += -LC:/Users/tom/bla/ffmpeg/lib/ -lavcodec -lavformat -lavutil
Run Code Online (Sandbox Code Playgroud)
我想在你的情况下,你需要-lavutillib参数.