Android 使用NDK R21編譯ffmpeg

一、前言

編譯ffmpeg是學習ffmpeg的第一步,本篇博客的環境是mac os 上 NDK21 版本編譯ffmpeg。之所以寫這篇博客,主要是因爲去年編譯的時候一切順利進行,而今年電腦CPU燒了(使用電腦設備要特別小心電量問題,電量太低容易造成cpu發熱)之後,所有數據都沒了,所以都是新環境,和去年一樣的腳本,今年編譯卻失敗了。

 

 二、失敗原因

失敗是成功之母,造成編譯失敗的原因是,所選的sysroot和toolchains出了問題

工具鏈選擇了:

/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669/toolchains/arm-linux-androideabi-4.9,

sysroot選擇了:

/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669/sysroot 

 

現象是:

【1】部分頭文件找不到,連ndk 核心jni文件也找不到

【2】clang、clang++找不到

 

以上問題莫名其妙,希望有了解的可以指教一下

 

三、成功方案

成功方案是參考網上博客的,使用了llvm,發現成功了。

#!/bin/bash

NDK=/Users/${USER}/Library/Android/sdk/ndk/21.0.6113669
TOOLCHAIN_ROOT_DIR=darwin-x86_6敏感詞
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/
API=18

#要編譯的ffmpeg內容方法
function build_android {

  make clean
  echo "Compiling FFmpeg for $CPU"

	./configure \
    --prefix=$PREFIX \
    --cross-prefix=$CROSS_PREFIX \
    --target-os=android \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC  \
    --cxx=$CXX  \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    --enable-gpl  \
    --enable-shared \
    --enable-runtime-cpudetect \
    --enable-small  \
    --enable-cross-compile  \
    --enable-asm  \
    --enable-neon \
    --enable-jni  \
    --enable-mediacodec \
    --enable-h26敏感詞_mediacodec  \
    --enable-hwaccels_mediacodec  \
    --disable-debug \
    --disable-hwaccels \
    --disable-postproc \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --disable-avdevice \
    --disable-stripping \
    $ADDITIONAL_CONFIGURE_FLAG

	make j4
	make install
	echo "The Compilation of FFmpeg for $CPU is completed"
}

#armv7-a
  ARCH=arm
  CPU=armv7-a
  CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
  CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
  SYSROOT=$NDK/platforms/android-${API}/arch-arm
#  SYSROOT=$NDK/toolchains/llvm/prebuilt/$TOOLCHAIN_ROOT_DIR/sysroot     #這個也是可以的,大概率和和ndk版本一致,如果是21,則不支持之前的版本
  CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
  PREFIX=$(pwd)/android/$CPU
  OPTIMIZE_CFLAGS=" -DANDROID -mfloat-abi=softfp -mfpu=vfp -marm - march=$CPU "
#  OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm - march=$CPU "

  build_android

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章