码迷,mamicode.com
首页 > 其他好文 > 详细

FFmpeg- error: undefined reference to 'av_frame_alloc(

时间:2018-12-25 13:54:36      阅读:537      评论:0      收藏:0      [点我收藏+]

标签:public   c语言   文件包含   必须   size   没有   ted   recv   文件中   

今天使用CMake编译FFmpeg的时候,死活编不过,提示什么“undefined reference to ‘av_frame_alloc()”

后来仔细查找,发现是头文件包含错误

错误的代码:

#include <libavutil/frame.h>
#include "IDecoder.h"

struct AVCodecContext;
class FFDecoder : public IDecoder{

public:
    virtual bool Open(XParameters params);
    /** 发送数据到解码队列 */
    virtual bool SendPacket(XData pkt);
    /** 从解码队列中获取一帧数据 */
    virtual XData RecvFrame();

protected:
    AVCodecContext *avctx = 0;
    AVFrame        *frame = 0;

};

解决办法

因为使用的是C++,所以在包含头文件的时候要特别注意,如果要包含的是C语言的头文件,必须用extern "C" 来包裹。比如:

extern "C" {
#include <libavcodec/avcodec.h>
}

我的问题就是直接在头文件中引入了FFmpeg的头文件 #include <libavutil/frame.h> ,但没有用extern "C" 包裹才出错的。正确的做法是使用extern "C" 包裹该头文件。

或者是直接在顶部声明用到的结构体即可。如:

#include "IDecoder.h"

struct AVCodecContext;
struct AVFrame;
class FFDecoder : public IDecoder{

public:
    virtual bool Open(XParameters params);
    /** 发送数据到解码队列 */
    virtual bool SendPacket(XData pkt);
    /** 从解码队列中获取一帧数据 */
    virtual XData RecvFrame();

protected:
    AVCodecContext *avctx = 0;
    AVFrame        *frame = 0;

};

 

FFmpeg- error: undefined reference to 'av_frame_alloc(

标签:public   c语言   文件包含   必须   size   没有   ted   recv   文件中   

原文地址:https://www.cnblogs.com/yongdaimi/p/10173434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!