ffmpeg库的接口都是c函数,其头文件也没有extern "C"的声明,所以在cpp文件里调用ffmpeg函数要注意了。
一般来说,一个用C写成的库如果想被C/C++同时可以使用,那在头文件应该加上
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
} // endof extern "C"
#endif

如果文件名是main.c,里面调用ffmpeg的接口没有问题;但换成main.cpp后,就会报错 undefined reference。
这是因为.cpp里的符号名不是简单的函数名,而函数后加后缀标志。

例如,代码里有一句av_register_all()调用
int main(int argc, char** argv)
{
 av_register_all();
}
如果该文件名是 main.c,则main.o里的符号为 (用nm命令查看)
$ nm  src/main.o
 U _av_register_all

如果该文件名是 main.cpp,则main.o里的符号为
$ nm src/main.o
  U __Z15av_register_allv
显然,.c和.cpp的函数符号名是不一样的。再看ffmpeg库的符号名
$ nm libavdevice.a | grep register
00000000 T _avdevice_register_all

这里我们就明白了,如果在.cpp里调用av_register_all()在链接时将找到不符号,因为.cpp要求的符号名
和ffmpeg库提供的符号名不一致。

可以这么解决:
extern "C"
{
#include <libavutil/avutil.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}

FFmpeg - C++中使用ffmpeg库相关推荐

  1. 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )

    文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...

  2. 【Android FFMPEG 开发】Android Studio 中 配置 FFMPEG 库最小兼容版本 ( undefined reference to 'atof' )

    文章目录 FFMPEG 最小兼容版本 注意事项 FFMPEG 最小兼容版本 注意事项 1 . 最小兼容版本 : 在 Ubuntu 中编译 FFMPEG 时 , 需要指定头文件 与 NDK 的依赖库 , ...

  3. android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...

    ## 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源) ## 视音频编辑器 ## 前言 有时候我们想对音视频进行加工处理,比如视频编辑.添加字幕.裁剪等功能处 ...

  4. 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 )

    文章目录 一.配置远程 Maven 仓库 二.配置依赖 三.Kotlin 中执行 FFmpeg 命令 四.FFmpeg 命令执行结果查看 五.源码下载 一.配置远程 Maven 仓库 在 Androi ...

  5. 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 FFmpegAndroid 框架 )

    文章目录 一.推荐开源项目 二.Android 中执行 FFMPEG 指令 1.导入依赖 2.Java 代码编写 3.使用时的代码示例 三.博客资源 一.推荐开源项目 最近需要在 Android 中进 ...

  6. android ffmpeg 优点_在Android中使用FFmpeg(android studio环境)

    1.首先我们需要一个已经编译好的libffmpeg.so文件.(怎么编译是个大坑,可以参考windows环境下编译android中使用的FFmpeg,也可以用网上下载的现成的,本文相关的github项 ...

  7. windos下编译ffmpeg生成dll、lib库(开启265)

    编译环境Win 64位+MSYS2 一.安装MSYS2 1.下载msys.exe,https://www.msys2.org/ 2.安装msys 3.运行msys并执行命令pacman -Syu,一律 ...

  8. ffmpeg的中文文档

    1. 概要 ffmpeg [global_options] {[input_file_options] -i INPUT_FILE} ... {[output_file_options] OUTPUT ...

  9. 在Android项目中调用FFmpeg命令

    概述 FFmpeg,命令行非常强大.在PC机上,调用一行FFmpeg命令,就可以对视频文件进行剪切.合并.转码等功能.本文将介绍如何在Android中调用FFmpeg命令行. 编译 前面已经有两篇文章 ...

最新文章

  1. LeetCode简单题之矩阵中的幸运数
  2. Tensorflow中2D卷积API使用
  3. 图像处理理论(五)——SIFT
  4. modbus RTU协议设备使用无线代替有线注意事项
  5. 编译 linux 3,linux内核的编译(3)
  6. java引擎组件_Java 脚本引擎入门
  7. 计算机视觉——全卷积网络(FCN)的学习笔记
  8. PHP数据结构预热:PHP的迭代器(转)
  9. Spring MVC 的配置安装
  10. c语言中extern关键字
  11. Android中的onWindowFocusChanged()方法详解
  12. 九、障碍罚函数法---内点、外点罚函数
  13. 大佬们用代码写的故事
  14. OIer__ZLY__OI计划
  15. 计算机硬盘分区类型,常见磁盘分区格式的区别是什么?
  16. 关于dll注入方式的学习(全局钩子注入)
  17. word-spacing、word-break、letter-spacing和white-space
  18. 《特征工程入门与实践》--- 特征学习
  19. 创建C++字符串最常用的五种方法,难吗?有手就行!
  20. NX二次开发-UF_DRF_ask_dim_info获得图纸尺寸属于哪个视图和图纸页

热门文章

  1. 微信小程序登录 更新中
  2. Apache Nifi 实战:多表导入实现及填坑 GitChat连接
  3. java 迭代器的原理_Java集合框架迭代器Iterator实现原理解析
  4. 【算法设计与分析】05 有关函数的渐进的界的定理
  5. AlarmManager使用注意事项
  6. 你是一直认为count(1)比count(*)效率高么?
  7. Java基础课程---将一个字符串反转,将字符串中指定部分进行反转,比如,abcdefg, 反转为abfedcg...
  8. [运动][组合]睡前运动
  9. [Leetcode][第347题][JAVA][前K个高频元素][优先队列][堆][遍历set/map]
  10. [Leedcode][JAVA][第46题][全排列][回溯算法]