FFmpeg编译与集成

Java是 write once,run anywhre,但 C 不一样,各平台均有差异,无法只写一次,而且各个平台的编译都不一样。比如android的ndk工具链,不同平台的库都是不一样的

本文主要讲解下 ffmpeg 在 win 平台下的编译以及集成

1、交叉编译

交叉编译:交叉编译就是程序的编译环境和实际运行环境不一致,即在一个平台上生成另一个平台上的可执行代码。

为什么要交叉编译,其实之前原因已经说过了,因为不同平台的差异,指令集都不一样,比如win上面是intel的指令集,但android手机上几乎百分百都是arm的指令集,所以直接拿win上编译出来的库给android用,肯定无法使用的,所以需要交叉编译。

交叉编译主要是借助android 的ndk工具包

下面大致列举了一下经常会用到的组件。

  • ARM 交叉编译器

  • 构建工具

  • Java 原生接口头文件

  • C 库

  • Math 库

  • 最小的 C++ 库

  • ZLib 压缩库

  • POSIX 线程

  • Android 日志库

  • Android 原生应用 API

  • OpenGL ES 库

  • OpenSL ES 库

下面来看一下 Android 所提供的 NDK 跟目录下的结构。

  • ndk-build: 该 Shell 脚本是 Android NDK 构建系统的起始点,一般在项目中仅仅执行这一个命令就可以编译出对应的动态链接库了。

  • ndk-gdb: 该 Shell 脚本允许用 GUN 调试器调试 Native 代码,并且可以配置到 AS 中,可以做到像调试 Java 代码一样调试 Native 代码。

  • ndk-stack: 该 Shell 脚本可以帮组分析 Native 代码崩溃时的堆栈信息。

  • build: 该目录包含 NDK 构建系统的所有模块。

  • platforms: 该目录包含支持不同 Android 目标版本的头文件和库文件, NDK 构建系统会根据具体的配置来引用指定平台下的头文件和库文件。

  • toolchains: 该目录包含目前 NDK 所支持的不同平台下的交叉编译器 - ARM 、X86、MIPS ,目前比较常用的是 ARM 。构建系统会根据具体的配置选择不同的交叉编译器。

toolchains里一般会提供这么一些工具:

  • CC:编译器,对C源文件进行编译处理,生成汇编文件。

  • AS:将汇编文件生成目标文件(汇编文件使用的是指令助记符,AS将它翻译成机器码)。

  • AR:打包器,用于库操作,可以通过该工具从一个库中删除或者增加目标代码模块。

  • LD:链接器,为前面生成的目标代码分配地址空间,将多个目标文件链接成一个库或者是可执行文件。

  • GDB:调试工具,可以对运行过程中的程序进行代码调试工作。

  • STRIP:以最终生成的可执行文件或者库文件作为输入,然后消除掉其中的源码。

  • NM:查看静态库文件中的符号表。

  • Objdump:查看静态库或者动态库的方法签名。

不过不同版本的ndk,里边的工具不一样,部分新的ndk里可能就没有ar 、strip 之类的&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值