前两天收到一个经过处理的webRTC源码,主要包含AEC,NS,AGC,VAD四项主要功能。要将其编译成一个ARM平台下库供Android APP使用。
怎么说呢,相当坑,源码好像是从GitHub上翻出来了,大牛精简抽离后,x86下可至今编译,但ARM下就需要下点功夫了。改起来相当累啊,耗时一个半工作日搞定,成果如下,请品鉴。
configure时为了好看,连接符可能不太标准。ANDROID_NDK的需自行设定。仅有脚本还不行,源码中还需做些微修改,这里就不再上传了,都是基本的编译问题,很简单。
#!/bin/sh
// ndk
export ANDROID_NDK="/var/sdk/android-ndk-r14b"
export SDK_VERSION=19
export ARCH=arm
if [ "$ARCH" = "arm64" ]
then
export PLATFORM_PREFIX="aarch64-linux-android-"
export HOST="aarch64"
export PLATFORM_VERSION=4.9
else
export PLATFORM_PREFIX="arm-linux-androideabi-"
export HOST="arm"
export PLATFORM_VERSION=4.9
fi
export PREFIX=$ANDROID_NDK/platforms/android-${SDK_VERSION}/arch-${ARCH}/usr
export EPREFIX=$ANDROID_NDK/toolchains/${PLATFORM_PREFIX}${PLATFORM_VERSION}/prebuilt/linux-x86_64
export SYSROOT=$ANDROID_NDK/platforms/android-${SDK_VERSION}/arch-${ARCH}
export TOOLCHAIN=$ANDROID_NDK/toolchains/${PLATFORM_PREFIX}${PLATFORM_VERSION}/prebuilt/linux-x86_64
export PATH=$PATH:$TOOLCHAIN/bin/
#export LIBS=$ANDROID_NDK/platforms/android-${SDK_VERSION}/arch-${ARCH}/usr/lib
export STRIP=$TOOLCHAIN/bin/${PLATFORM_PREFIX}strip
export CC=$TOOLCHAIN/bin/${PLATFORM_PREFIX}gcc
export LD=$TOOLCHAIN/bin/${PLATFORM_PREFIX}ld
export AR=$TOOLCHAIN/bin/${PLATFORM_PREFIX}ar
export CXX=$TOOLCHAIN/bin/${PLATFORM_PREFIX}c++
export CROSS_PREFIX=$TOOLCHAIN/bin/${PLATFORM_PREFIX}
export NM=$TOOLCHAIN/bin/${PLATFORM_PREFIX}nm
echo "export finished, start to configure"
# below cmd should be executed manually
./configure --prefix=$PREFIX --enable-shared --host=arm-linux --enable-neon
--with-sysroot=$SYSROOT --prefix=$PREFIX --exec-prefix=$EPREFIX
LDFLAGS="-L$SYSROOT/usr/lib" CFLAGS="-mcpu=cortex-a8 -mfloat-abi=softfp
-mfpu=neon --sysroot=$SYSROOT -O3
-I/var/sdk/android-ndk-r14b/sources/cxx-stl/stlport/stlport/
-I/var/sdk/android-ndk-r14b/sources/cxx-stl/gnu-libstdc++/4.9/
-DWEBRTC_POSIX -DWEBRTC_LINUX -DWEBRTC_THREAD_RR -DWEBRTC_CLOCK_TYPE_REALTIME
-DWEBRTC_ANDROID -DWEBRTC_ARCH_ARM -DNDEBUG"
CXXFLAGS="-mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon -std=c++11 -O3
--sysroot=$SYSROOT
-I/var/sdk/android-ndk-r14b/sources/cxx-stl/stlport/stlport/
-I/var/sdk/android-ndk-r14b/sources/cxx-stl/gnu-libstdc++/4.9/
-DWEBRTC_POSIX -DWEBRTC_LINUX -DWEBRTC_THREAD_RR
-DWEBRTC_CLOCK_TYPE_REALTIME -DWEBRTC_ANDROID -DWEBRTC_ARCH_ARMi -DNDEBUG"
HAVE_ARM=1 HAVE_ARMV7=1 HAVE_NEON=1