(三)FFmpeg-4.3.1配合android-ndk-r21b編譯成一個so文件

參考兩個大佬文章應(yīng)該就沒問題

編譯FFmpeg4.3.1 、x264并移植到Android_Vinson-CSDN博客
Android最簡單的基于FFmpeg的例子(三)---編譯FFmpeg成一個SO庫 | binglingziyu的博客 (ihubin.com)

編譯環(huán)境

  • Ubuntu
  • FFmpeg-n4.3.1
  • android-ndk-r21

編譯前配置:

修改FFmpeg-4.3.1下的configure文件

修改前

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

修改后

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
SLIB_INSTALL_LINKS='$(SLIBNAME)'

添加編譯腳本 build_android.sh

此次需要注意的是,這次是要編譯成一個so,所以不能直接先編譯成so,要全部編譯成.a文件,所以需要修改的是:
--disable-shared
--enable-static \

#!/bin/bash

PREFIX=/home/it/ffmpeg-4.3.1/android/armeabi-v7a

TOOLCHAIN=/home/it/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64

build()
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--enable-small \
--enable-gpl \
--disable-doc \
--disable-programs \
--disable-avdevice \
--enable-cross-compile \
--target-os=android \
--arch=armeabi-v7a \
--cc=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-

sudo make clean
sudo make -j4
sudo make install
}

build

編譯過后,會產(chǎn)生.a文件

1638166504(1).png

最后合成一個libffmpeg.so

進(jìn)入剛生成.a文件的地方,創(chuàng)建一個sh編譯文件union_ffmpegso.sh,添加如下編譯命令:

echo "開始編譯ffmpeg so"

#NDK路徑.
export NDK=/home/liuf/ndk/android-ndk-r21

PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

PREFIX=$(pwd)


$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$PLATFORM/usr/lib \
-L$PLATFORM/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
    libavcodec.a \
    libavfilter.a \
    libswresample.a \
    libavformat.a \
    libavutil.a \
    libpostproc.a \
    libswscale.a \
    -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
    $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a \

echo "完成編譯ffmpeg so"

最后執(zhí)行編譯: sudo ./union_ffmpegso.sh
執(zhí)行速度很快,在當(dāng)前目錄下會得到一個libffmeg.so文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容