ffmpeg编译问题

news/2024/7/10 20:36:57 标签: ffmpeg, c++, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

利用class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpeg实现一个播放器࿰c;class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpeg提供动态库࿰c;但是编译链接的时候遇到下面的问题:

ckquote>

../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to 'sws_freeContext(SwsContext*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:28: error: undefined reference to 'av_frame_free(AVFrame**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:33: error: undefined reference to 'av_frame_free(AVFrame**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:38: error: undefined reference to 'avcodec_close(AVCodecContext*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:39: error: undefined reference to 'avcodec_free_context(AVCodecContext**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:44: error: undefined reference to 'avformat_close_input(AVFormatContext**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:55: error: undefined reference to 'avformat_network_init()'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:58: error: undefined reference to 'avformat_open_input(AVFormatContext**, char const*, AVInputFormat const*, AVDictionary**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:64: error: undefined reference to 'avformat_find_stream_info(AVFormatContext*, AVDictionary**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:84: error: undefined reference to 'avcodec_find_decoder(AVCodecID)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:91: error: undefined reference to 'avcodec_alloc_context3(AVCodec const*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:98: error: undefined reference to 'avcodec_parameters_to_context(AVCodecContext*, AVCodecParameters const*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:104: error: undefined reference to 'avcodec_open2(AVCodecContext*, AVCodec const*, AVDictionary**)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:110: error: undefined reference to 'av_frame_alloc()'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:117: error: undefined reference to 'av_frame_alloc()'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:124: error: undefined reference to 'av_image_get_buffer_size(AVPixelFormat, int, int, int)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:125: error: undefined reference to 'av_malloc(unsigned long)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:128: error: undefined reference to 'av_image_fill_arrays(unsigned char**, int*, unsigned char const*, AVPixelFormat, int, int, int)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:131: error: undefined reference to 'sws_getContext(int, int, AVPixelFormat, int, int, AVPixelFormat, int, SwsFilter*, SwsFilter*, double const*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:148: error: undefined reference to 'av_read_frame(AVFormatContext*, AVPacket*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:151: error: undefined reference to 'avcodec_send_packet(AVCodecContext*, AVPacket const*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:157: error: undefined reference to 'avcodec_receive_frame(AVCodecContext*, AVFrame*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:164: error: undefined reference to 'sws_scale(SwsContext*, unsigned char const* const*, int const*, int, int, unsigned char* const*, int const*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:170: error: undefined reference to 'av_frame_unref(AVFrame*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:174: error: undefined reference to 'av_packet_unref(AVPacket*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:187: error: undefined reference to 'sws_freeContext(SwsContext*)'
../class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer/videoplayerwidget.cpp:188: error: undefined reference to 'sws_getContext(int, int, AVPixelFormat, int, int, AVPixelFormat, int, SwsFilter*, SwsFilter*, double const*)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:288: class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer] Error 1
10:29:50: 进程"/usr/bin/make"退出࿰c;退出代码 2 。
Error while building/deploying project class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpegWidgetPlayer (kit: Desktop Qt 5.15.2 GCC 64bit)
When executing step "Make"
10:29:50: Elapsed time: 00:03.

ckquote>

 通过分析报错信息可以看到在链接阶段提示class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpeg相关的api找不到符号࿰c;看到这个问题百思不得其解࿰c;该工程我是利用qt编译链接࿰c;可以肯定的是pro文件中已经通过LIBS关键字指明了依赖库的路径和依赖库的名称࿰c;但是仍然提示找不到࿰c;最后通过查阅资料࿰c;才了解问题产生的原因:color:#fe2c24;">qt工程是c++代码࿰c;class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpeg是c原因编写的࿰c;当c++代码调用C库时对c++代码中调用的头文件需要使用extern "C"包含起来࿰c;以此让编译器按照C的方式编译class="tags" href="/tags/FFMPEG.html" title=ffmpeg>ffmpeg相关的头文件

解决方法如下:

<code class="language-cpp">#include <QWidget>
#include <QImage>
#include <QTimer>
#include <QPainter>
#include <QCoreApplication>
#include <QResizeEvent>
extern "C"   //按照C语言方式编译api接口
{
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
#include <libavutil/avutil.h>
#include <libpostproc/postprocess.h>
#include <libavutil/ffversion.h>
#include <libavutil/imgutils.h>
}code>

总结

下面对编译阶段“undefined reference to”的报错原因进行总结࿰c;希望能够大家有所帮助:

  • 产生这个报错简单的是就是依赖库未包含࿰c;就是说未指定依赖库的路径和和依赖库名称࿰c;这个通过LIBS关键字就可以解决
  • 如果确定LIBS等类似的方式已经指明依赖库的路径和依赖库名称࿰c;还是有这个报错࿰c;那么确认下是否是C++代码调用了C语言的库࿰c;如果属实࿰c;那么就是用color:#fe2c24;">extern "C"关键字包含C库的头文件

http://www.niftyadmin.cn/n/5251098.html

相关文章

LeetCode208.实现Trie(前缀树)

我一开始想题目叫前缀树&#xff0c;是要用树吗&#xff1f;但是不知道用树怎么写&#xff0c;然后我就花了10多分钟&#xff0c;用了HashMap解了。map的key是word&#xff0c;value是一个放了word的所有前缀的set&#xff0c;这样search方法就非常简单了&#xff0c;只要看has…

springboot3 liquibase SQL执行失败自动回滚,及自动打tag

一&#xff1a; 自动执行回滚&#xff0c; 已执行成功的忽略&#xff0c;新sql执行失败则执行新sql文件中的回滚sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…

Linux 系统上配置 SSH 密钥

1. 生成 SSH 密钥 打开终端&#xff0c;运行以下命令来生成 SSH 密钥&#xff1a; ssh-keygen -t rsa -b 4096 -C "wqzbxhexample.com" 替换 "wqzbxhexample.com" 为你在 GitHub 注册时使用的邮箱地址。 2. 添加 SSH 密钥到 SSH 代理 运行以下命令来启…

Albumentations(Augmentation Transformations)

Albumentations&#xff08;Augmentation Transformations&#xff09; Albumentations&#xff08;Augmentation Transformations&#xff09;是一个用于图像数据增强&#xff08;数据增广&#xff09;的Python包。它提供了丰富的图像增强技术&#xff0c;用于训练机器学习模…

解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined

现象&#xff1a; 原因&#xff1a; 该错误表明在服务端渲染 (SSR) 过程中&#xff0c;有一些代码尝试在没有浏览器环境的情况下执行与浏览器相关的操作。这在服务端渲染期间是一个常见的问题&#xff0c;因为在服务端渲染期间是没有浏览器 API。 解决办法&#xff1a; 1. 修…

[Linux] yum安装分布式LNMP架构

1. 在一台主机安装nginx&#xff08;192.168.136.120&#xff09; 1.1 搭建nginx相关的yum源 cd /yum.repos.d mkdir bak mv *.repo bak vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/7/$basearch/ gpgche…

快速幂(C语言)

前言 快速幂算法一般用于高次幂取模的题目中&#xff0c;比如求3的10000次方对7取模。这时候有些同学会说&#xff1a;这还不简单&#xff1f;我直接调用pow函数然后对结果%7不得了么&#xff1f;可是3的10000次方这么庞大的数字&#xff0c;真的能储存在计算机里么&#xff1f…

nodejs微信小程序+python+PHP北京地铁票务APP-计算机毕业设计推荐 -安卓

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…