本文部分整理自 最简单的基于FFmpeg的移动端例子:Android HelloWorld
FFmpeg类库完整功能脚本
Note : 必须要修改部分configure,这部分请查看上面链接的 (1)编译FFmpeg类库 b) 修改FFmpeg的configure
部分,这里我就不赘述了。
Note : 关于交叉编译一些类似Sysroot名词的解释可以看这里:Android 独立工具链
Note : 解释下Clang
引用块内容Clang是一个C语言、C++、Objective-C、C++语言的轻量级编译器。源代码发布于BSD协议下。简介2013年4月,Clang已经全面支持C++11标准,并开始实现C++1y特性(也就是C++14,这是C++的下一个小更新版本)
Code:
# NDK地址
NDK=/Users/biezhihua/software/android-ndk-r13b
# 工具链目录
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
# sysroot 目录
# sysroot 是一个包含针对您的目标的系统标头和库的目录
PLATFORM=$NDK/platforms/android-21/arch-arm
# Lib结果目录
PREFIX=/Users/biezhihua/software/TestLib
# --target-os=... 目标系统 Android是Linux内核
# --prefix=... Lib(so)结果目录
# --enable-cross-compile 使用交叉编译
# --cc=... 使用C编译器
# --cross-prefix=... 交叉工具链前缀
# --disable-stripping 禁止剥离可执行程序和共享库
# --nm=... 这个不知道,知道的请留言
./configure --target-os=linux --prefix=${PREFIX} \
--enable-cross-compile \
--arch=arm \
--cc=${PREBUILT}/darwin-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=${PREBUILT}/darwin-x86_64/bin/arm-linux-androideabi- \
--nm=${PREBUILT}/darwin-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=${PLATFORM} \
--disable-stripping \
--enable-runtime-cpudetect \
--disable-asm \
--enable-gpl \
--enable-shared \
--enable-static \
--enable-small \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffserver \
--disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
Result :
gcc编译器 CFLAGS 标志参数
普通编译选项
参数 | 说明 |
---|---|
-S | 只是编译不汇编,生成汇编代码 |
-E | 只进行预编译,不做其他处理 |
-g | 在可执行程序中包含标准调试信息 |
-o file | 把输出文件输出到file里 |
-v | 打印出编译器内部编译各过程的命令行信息和编译器的版本 |
-I dir | 在头文件的搜索路径列表中添加dir目录 |
-L dir | 在库文件的搜索路径列表中添加dir目录 |
-static | 链接静态库 |
-llibrary | 连接名为library的库文件 |
告警和出错选项
选 项 | 含 义 |
---|---|
-ansi | 支持符合ANSI标准的C程序 |
-pedantic | 允许发出ANSI C标准所列的全部警告信息 |
-pedantic-error | 允许发出ANSI C标准所列的全部错误信息 |
-w | 关闭所有告警 |
-Wall | 允许发出Gcc提供的所有有用的报警信息 |
-werror | 把所有的告警信息转化为错误信息,并在告警发生时终止编译过程 |
体系结构相关选项
选 项 | 含 义 |
---|---|
-mcpu=type | 针对不同的CPU使用相应的CPU指令。可选择的type有i386、i486、pentium及i686等 |
-mieee-fp | 使用IEEE标准进行浮点数的比较 |
-mno-ieee-fp | 不使用IEEE标准进行浮点数的比较 |
-msoft-float | 输出包含浮点库调用的目标代码 |
-mshort | 把int类型作为16位处理,相当于short int |
-mrtd | 强行将函数参数个数固定的函数用ret NUM返回,节省调用函数的一条指令 |