ffmpeg交叉编译学习(一)

用到的linux 基础知识:

1.打压缩包:
cd Industrial(进入文件目录)->zip -r Industrial.zip ./* ,压缩文件目录下的所有文件(其中./*表示此文件夹下面的所有文件)->ls (列出此文件下面的所有文件目录)->sz Industrial.zip (下载文件从远程服务器)

2.sz用法:(说明:一般只能下载单个文件,如果是文件目录的话则不可以,需要先经过文件目录进行压缩,然后再下载)

下载一个文件
sz filename
下载多个文件
sz filename1 filename2
下载dir目录下的所有文件,不包含dir下的文件夹
sz dir/*
3. rz用法:一次可以指定多个文件
4.查看 目录的绝对地址。 在当前目录下 执行 pwd

#交叉编译步骤:

1.在 ffmpeg 包内有 configure 文件的同级目录下
vim 文件( myfileName) 新建文件 然后把下面的命令 复制进去 然后 :wq! 保存脱出
2. chmod -x myfileName //给myfileName 文件加上可执行权限
3. ./myfileName (文件名) 执行命令


#!/bin/bash

#ndk 的跟目录
NDK_ROOT="/root/myNDKDir/android-ndk-r16b"    

TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11  -O0 -fPIC"
INCLUDES="-isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++/include -isystem $NDK_ROOT/sources/android/support/include -isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++abi/include"

#FLAGSINCLUDES 的值可以在 android c++ 项目的目录下 app\.externalNativeBuild\cmake\release\arm64-v8a\build.ninja
文件下查找 

# 编译出来的包的存放位置
PREFIX=./android/armeabi-ls1114  

#--prefix=$PREFIX \  设置存放位置
#  --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \交叉编译用到的 gcc
#--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \ 设置 内部c c++ 文件引用的 头文件 和库文件 的 查找位置
#--extra-cflags="$FLAGS $INCLUDES" \  传给 gcc 的参数
#--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \ 传给 gcc 的参数
#--disable-shared \ 设置不生成 动态库 (默认也是这样的可以不设置)
#--enable-static \  设置生成静态库 (默认也是这样的可以不设置)


./configure \
--prefix=$PREFIX \   
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \
--arch=arm \
--target-os=android 

make clean
make install

打包 libavcodec.a libavfilter.a libavformat.a libavutil.a libswresample.a libswscale.a静态库生成为 libffmpeg.so 动态库

1、在 libavcodec.a libavfilter.a libavformat.a libavutil.a libswresample.a libswscale.a所在的目录执行:

//设置环境变量: gcc编译器
export $CC="/root/myNDKDir/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc" 
//ndk 根目录
NDK_ROOT="/root/myNDKDir/android-ndk-r16b"

$CC --sysroot=$NDK_ROOT/platforms/android-21/arch-arm/ -shared -o libffmpeg.so -Wl,--whole-archive libavcodec.a  libavfilter.a  libavformat.a  libavutil.a  libswresample.a  libswscale.a -Wl,--no-whole-archive

你可能感兴趣的:(NDK,linux)