版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DTJ_74/article/details/87905678
一分一秒,原来你也在这里。
目录
交叉编译是什么:可以简单理解为,就是在一个平台上生成另一个平台上的可执行代码。
Android NDK
Android NDK 是一套允许您使用原生代码语言(例如C和C++) 实现部分应用的工具集。在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库。
简单来说就是android 软件开发包SDK工具集,用来扩展SDK功能。
主要包含相关组件:
- Api
- 交叉编译器
- 链接程序
- 调试器
- 构建工具
- 文档
- ndk-build:该shell脚本是Android NDK 构建系统的起始点。
- ndk-gdb:该shell脚本语序用GUN调试器调试原生组件。
- ndk-stack:该shell脚本帮助分析原生组件崩溃时的堆栈追踪。
- build:该目录包含AndroidNDK 构建系统的所有模块。
- platforms:该目录包含了支持不同Android目标版本的头文件和库文件。
- samples:包括了例子程序。
- sources:包含了可供人员导入到现有的Android NDK项目一些共享模块。
- toolchains:该目录包含目前Android NDK支持的不同目标机体系结构的交叉编译器。
什么是Shell脚本,可以查看 android音视频开发基础2--Shell脚本+linux命令
Android JNI:
JNI 是java程序设计语言功能的最强特征,JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。。。5好理,总之好犀利。往后博客会介绍。
这个文章是接上一篇文章的,android音视频开发基础4--FFmpeg 入门。
上一篇文章就简单介绍了相关操作,但是,android 交叉编译没有通过。
交叉编译是什么:可以简单理解为,就是在一个平台上生成另一个平台上的可执行代码。
先提供一个编译脚本。
#!/bin/bash
export TMPDIR=D:/ffmpeg/ffmpeg-3.3.9/tmpdir
NDK=D:/NDK/android-ndk-r10e
SYSROOT=$NDK/platforms/android-18/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=D:/ffmpeg/ffmpeg-3.3.9/output/$CPU
ADDI_CFLAGS="-Os -fpic -marm"
function build_one
{
./configure \
--extra-libs=-lgcc \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-asm \
--enable-neon \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-pthreads \
--enable-small \
--enable-jni \
--enable-mediacodec \
--enable-runtime-cpudetect \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="$ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}
build_one
read -p "Press any key to continue."
脚本是可以成功交叉编译的。。。
以上我用的相关版本已经在楼上脚本显示了。
好似 ndk 版本也有一定影响的。..