前两天收到一个经过处理的webRTC源码,主要包含AEC,NS,AGC,VAD四项主要功能。要将其编译成一个ARM平台下库供Android APP使用。
怎么说呢,相当坑,源码好像是从GitHub上翻出来了,大牛精简抽离后,x86下可至今编译,但ARM下就需要下点功夫了。改起来相当累啊,耗时一个半工作日搞定,成果如下,请品鉴。
configure时为了好看,连接符可能不太标准。ANDROID_NDK的需自行设定。仅有脚本还不行,源码中还需做些微修改,这里就不再上传了,都是基本的编译问题,很简单。
-
-
-
// 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" \
-