一、修改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)'
二、执行configure
./configure --disable-yasm
三、脚本记录
1、可以编译64位和32位脚本
#!/bin/bash
NDK=/Users/tal/plugin/ndk/android-ndk-r15c
ADDI_CFLAGS="-fPIE -pie"
ADDI_LDFLAGS="-fPIE -pie"
#编译平台,linux是darwin-x86_64 mac是:darwin-x86_64
# buildplatforms=linux-x86_64
buildplatforms=darwin-x86_64
ANDROID_ARMV5_CFLAGS="-march=armv5te"
ANDROID_ARMV7_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon" #-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp
ANDROID_ARMV8_CFLAGS="-march=armv8-a"
ANDROID_X86_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
ANDROID_X86_64_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"
configure()
{
CPU=$1
CFALGS=$2
PREFIX=$(pwd)/android/$CPU
x264=$(pwd)/x264/android/$CPU
HOST=""
CROSS_PREFIX=""
SYSROOT=""
ARCH=""
if [ "$CPU" == "armv7-a" ]
then
ARCH="arm"
HOST=arm-linux
SYSROOT=$NDK/platforms/android-21/arch-arm/
CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/${buildplatforms}/bin/arm-linux-androideabi-
else
ARCH="aarch64"
HOST=aarch64-linux
SYSROOT=$NDK/platforms/android-21/arch-arm64/
CROSS_PREFIX=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/${buildplatforms}/bin/aarch64-linux-android-
fi
./configure \
--prefix=$PREFIX \
--disable-encoders \
--disable-decoders \
--disable-avdevice \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-network \
--disable-doc \
--disable-symver \
--enable-neon \
--enable-shared \
--enable-gpl \
--enable-pic \
--enable-jni \
--enable-pthreads \
--enable-mediacodec \
--enable-encoder=aac \
--enable-encoder=gif \
--enable-encoder=libopenjpeg \
--enable-encoder=libmp3lame \
--enable-encoder=libwavpack \
--enable-encoder=mpeg4 \
--enable-encoder=pcm_s16le \
--enable-encoder=png \
--enable-encoder=srt \
--enable-encoder=subrip \
--enable-encoder=yuv4 \
--enable-encoder=text \
--enable-decoder=aac \
--enable-decoder=aac_latm \
--enable-decoder=libopenjpeg \
--enable-decoder=mp3 \
--enable-decoder=mpeg4_mediacodec \
--enable-decoder=pcm_s16le \
--enable-decoder=flac \
--enable-decoder=flv \
--enable-decoder=gif \
--enable-decoder=png \
--enable-decoder=srt \
--enable-decoder=xsub \
--enable-decoder=yuv4 \
--enable-decoder=vp8_mediacodec \
--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-hwaccel=h264_mediacodec \
--enable-hwaccel=mpeg4_mediacodec \
--enable-ffmpeg \
--enable-bsf=aac_adtstoasc \
--enable-bsf=h264_mp4toannexb \
--enable-bsf=hevc_mp4toannexb \
--enable-bsf=mpeg4_unpack_bframes \
--enable-cross-compile \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--extra-cflags="$CFALGS -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated" \
--extra-cxxflags="-D__thumb__ -fexceptions -frtti" \
--sysroot=$SYSROOT
}
# --enable-libx264 \
# --enable-encoder=libx264 \
# --extra-cflags="-I$x264/include $ADDI_CFLAGS" \
# --extra-ldflags="-L$x264/lib"
build()
{
make clean
cpu=$1
CFALGS=$2
echo "build $cpu"
echo "CFALGS $CFALGS"
configure $cpu $CFALGS
make -j4
make install
}
build arm64
build armv7-a
2、可以编译全部平台CPU架构版本
#!/bin/sh
MY_LIBS_NAME=ffmpeg-3.3.9
MY_DIR=ffmpeg-3.3.9
# cd ./${MY_DIR}
#编译的过程中产生的中间件的存放目录,为了区分编译目录,源码目录,install目录
MY_BUILD_DIR=binary
NDK_PATH=/Users/tal/plugin/ndk/android-ndk-r15c
#编译平台,linux是darwin-x86_64 mac是:darwin-x86_64
BUILD_PLATFORM=darwin-x86_64
# BUILD_PLATFORM=linux-x86_64
TOOLCHAIN_VERSION=4.9
ANDROID_VERSION=21
ANDROID_ARMV5_CFLAGS="-march=armv5te"
ANDROID_ARMV7_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon" #-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp
ANDROID_ARMV8_CFLAGS="-march=armv8-a"
ANDROID_X86_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
ANDROID_X86_64_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"
# 目标平台
# TARGET_OS=linux
TARGET_OS=android
# params($1:arch,$2:arch_abi,$3:host,$4:cross_prefix,$5:cflags)
build_bin() {
echo "-------------------star build $2-------------------------"
ARCH=$1 # arm arm64 x86 x86_64
ANDROID_ARCH_ABI=$2 # armeabi armeabi-v7a x86 mips
PREFIX=$(pwd)/android/${MY_LIBS_NAME}/${ANDROID_ARCH_ABI}/
HOST=$3
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-${ARCH}
CFALGS=$5
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
CROSS_PREFIX=${TOOLCHAIN}/bin/$4-
# build 中间件
BUILD_DIR=./${MY_BUILD_DIR}/${ANDROID_ARCH_ABI}
echo "pwd==$(pwd)"
echo "ARCH==${ARCH}"
echo "PREFIX==${PREFIX}"
echo "HOST==${HOST}"
echo "SYSROOT=${SYSROOT}"
echo "CFALGS=$5"
echo "CFALGS=${CFALGS}"
echo "TOOLCHAIN==${TOOLCHAIN}"
echo "CROSS_PREFIX=${CROSS_PREFIX}"
#echo "-------------------------按任意键继续---------------------"
#read -n 1
#echo "-------------------------继续执行-------------------------"
mkdir -p ${BUILD_DIR} #创建当前arch_abi的编译目录,比如:binary/armeabi-v7a
echo "创建目录:"${BUILD_DIR}
# cd ${BUILD_DIR} #此处 进了当前arch_abi的2级编译目录
# cd ../../
echo "执行脚本之前,当前目录:"$(pwd)
# sh ../../${MY_DIR}/configure \
# sh configure \
sh configure \
--disable-yasm \
--prefix=${PREFIX} \
--target-os=${TARGET_OS} \
--arch=${ARCH} \
--sysroot=$SYSROOT \
--enable-cross-compile \
--cross-prefix=${CROSS_PREFIX} \
--extra-cflags="$CFALGS -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated" \
--extra-cxxflags="-D__thumb__ -fexceptions -frtti" \
--extra-ldflags="-L${SYSROOT}/usr/lib" \
--enable-shared \
--disable-static \
--enable-asm \
--enable-neon \
--disable-encoders \
--enable-encoder=aac \
--enable-encoder=mjpeg \
--enable-encoder=png \
--disable-decoders \
--enable-decoder=aac \
--enable-decoder=aac_latm \
--enable-decoder=h264 \
--enable-decoder=mpeg4 \
--enable-decoder=mjpeg \
--enable-decoder=png \
--disable-demuxers \
--enable-demuxer=image2 \
--enable-demuxer=h264 \
--enable-demuxer=aac \
--disable-parsers \
--enable-parser=aac \
--enable-parser=ac3 \
--enable-parser=h264 \
--enable-gpl \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-debug \
--enable-small
make clean
# make
make -j4
make install
#从当前arch_abi编译目录跳出,对应上面的cd ${BUILD_DIR},以便function多次执行
# cd ../../
echo "-------------------$2 build end-------------------------"
}
# build armeabi
build_bin arm armeabi arm-linux-androideabi arm-linux-androideabi ${ANDROID_ARMV5_CFLAGS}
#build armeabi-v7a
build_bin arm armeabi-v7a arm-linux-androideabi arm-linux-androideabi "$ANDROID_ARMV7_CFLAGS"
#build arm64-v8a
build_bin arm64 arm64-v8a aarch64-linux-android aarch64-linux-android "$ANDROID_ARMV8_CFLAGS"
#build x86
build_bin x86 x86 x86 i686-linux-android "$ANDROID_X86_CFLAGS"
#build x86_64
build_bin x86_64 x86_64 x86_64 x86_64-linux-android "$ANDROID_X86_64_CFLAGS"
3、可以生成一个so文件的脚本
#!/bin/sh
MY_LIBS_NAME=ffmpeg-3.3.9
MY_DIR=ffmpeg-3.3.9
# cd ./${MY_DIR}
#编译的过程中产生的中间件的存放目录,为了区分编译目录,源码目录,install目录
MY_BUILD_DIR=binary
NDK_PATH=/Users/tal/plugin/ndk/android-ndk-r15c
#编译平台,linux是darwin-x86_64 mac是:darwin-x86_64
BUILD_PLATFORM=darwin-x86_64
# BUILD_PLATFORM=linux-x86_64
TOOLCHAIN_VERSION=4.9
ANDROID_VERSION=21
ANDROID_ARMV5_CFLAGS="-march=armv5te"
ANDROID_ARMV7_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon" #-mfloat-abi=hard -mfpu=vfpv3-d16 #-mfloat-abi=hard -mfpu=vfp
ANDROID_ARMV8_CFLAGS="-march=armv8-a"
ANDROID_X86_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
ANDROID_X86_64_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"
# 目标平台
# TARGET_OS=linux
TARGET_OS=android
# params($1:arch,$2:arch_abi,$3:host,$4:cross_prefix,$5:cflags)
build_bin() {
echo "-------------------star build $2-------------------------"
ARCH=$1 # arm arm64 x86 x86_64
ANDROID_ARCH_ABI=$2 # armeabi armeabi-v7a x86 mips
PREFIX=$(pwd)/android/${MY_LIBS_NAME}/${ANDROID_ARCH_ABI}/
HOST=$3
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-${ARCH}
CFALGS=$5
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
CROSS_PREFIX=${TOOLCHAIN}/bin/$4-
# build 中间件
BUILD_DIR=./${MY_BUILD_DIR}/${ANDROID_ARCH_ABI}
echo "------pwd==$(pwd)"
echo "------ARCH==${ARCH}"
echo "------PREFIX==${PREFIX}"
echo "------HOST==${HOST}"
echo "------SYSROOT=${SYSROOT}"
echo "------CFALGS=$5"
echo "------CFALGS=${CFALGS}"
echo "------TOOLCHAIN==${TOOLCHAIN}"
echo "------CROSS_PREFIX=${CROSS_PREFIX}"
#echo "-------------------------按任意键继续---------------------"
#read -n 1
#echo "-------------------------继续执行-------------------------"
# mkdir -p ${BUILD_DIR} #创建当前arch_abi的编译目录,比如:binary/armeabi-v7a
# echo "创建目录:"${BUILD_DIR}
# cd ${BUILD_DIR} #此处 进了当前arch_abi的2级编译目录
# cd ../../
echo "执行脚本之前,当前目录:"$(pwd)
# sh ../../${MY_DIR}/configure \
# sh configure \
# sh configure \
# --disable-yasm \
# --prefix=${PREFIX} \
# --target-os=${TARGET_OS} \
# --arch=${ARCH} \
# --sysroot=$SYSROOT \
# --enable-cross-compile \
# --cross-prefix=${CROSS_PREFIX} \
# --extra-cflags="$CFALGS -Os -fPIC -DANDROID -Wfatal-errors -Wno-deprecated" \
# --extra-cxxflags="-D__thumb__ -fexceptions -frtti" \
# --extra-ldflags="-L${SYSROOT}/usr/lib" \
# --disable-shared \
# --enable-static \
# --enable-asm \
# --enable-neon \
# --disable-encoders \
# --enable-encoder=aac \
# --enable-encoder=mjpeg \
# --enable-encoder=png \
# --disable-decoders \
# --enable-decoder=aac \
# --enable-decoder=aac_latm \
# --enable-decoder=h264 \
# --enable-decoder=mpeg4 \
# --enable-decoder=mjpeg \
# --enable-decoder=png \
# --disable-demuxers \
# --enable-demuxer=image2 \
# --enable-demuxer=h264 \
# --enable-demuxer=aac \
# --disable-parsers \
# --enable-parser=aac \
# --enable-parser=ac3 \
# --enable-parser=h264 \
# --enable-gpl \
# --disable-doc \
# --disable-ffmpeg \
# --disable-ffplay \
# --disable-ffprobe \
# --disable-symver \
# --disable-debug \
# --enable-small
# make clean
# make -j4
# make install
#从当前arch_abi编译目录跳出,对应上面的cd ${BUILD_DIR},以便function多次执行
# cd ../../
PLATFORM=$NDK_PATH/platforms/android-${ANDROID_VERSION}/arch-${ARCH}
# TOOLCHAIN=/Users/tal/plugin/ndk/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
# PREFIX==/Users/tal/Desktop/Desktop-2021/ffmpeg/ffmpeg-3.3.9/android/ffmpeg-3.3.9/armeabi-v7a/
# .a文件的路径
MYPREFIX=${PREFIX}/lib
$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$PLATFORM/usr/lib \
-L$PLATFORM/usr/lib \
-soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
${MYPREFIX}/libavcodec.a \
${MYPREFIX}/libavdevice.a \
${MYPREFIX}/libavfilter.a \
${MYPREFIX}/libswresample.a \
${MYPREFIX}/libavformat.a \
${MYPREFIX}/libavutil.a \
${MYPREFIX}/libpostproc.a \
${MYPREFIX}/libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
echo "-------------------$2 build end-------------------------"
}
# build armeabi
# build_bin arm armeabi arm-linux-androideabi arm-linux-androideabi ${ANDROID_ARMV5_CFLAGS}
#build armeabi-v7a
build_bin arm armeabi-v7a arm-linux-androideabi arm-linux-androideabi "$ANDROID_ARMV7_CFLAGS"
#build arm64-v8a
# build_bin arm64 arm64-v8a aarch64-linux-android aarch64-linux-android "$ANDROID_ARMV8_CFLAGS"
#build x86
# build_bin x86 x86 x86 i686-linux-android "$ANDROID_X86_CFLAGS"
#build x86_64
# build_bin x86_64 x86_64 x86_64 x86_64-linux-android "$ANDROID_X86_64_CFLAGS"
网友评论