一、废话
最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用
还是那句话 我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处.
联系我可以直接评论,也可以加我QQ:11635423
准备:1.x264的源码
2.cygwin下载,安装,这个网上基本都有.我不讲太多.git cygdrive bash make 这几个都需要下载
3.ndk我现在的版本r9c.最新的现在应该到r9d了.需要的去更新问题不大的.而且注意设置环境变量
我的设置如下: 因为下面的命令要用到,所以没设的就跟我设一样的就好,避免出现不必要的问题
ANDROID_NDK_ROOT E:\android-ndk-r9c\
名字一样就好,路径还是你自己的.
4.编译脚本.这个脚本自己去理解吧.我也是一知半解--脚本名称:Config.sh
EXTRA_OPTIONS=()
case $OS in
Android)
GNU_BUILD_OS=linux
EXTRA_OPTIONS+=(
--extra-cflags=-DANDROID
--extra-cflags=-gdwarf-2
)
case $ARCH in
armeabi-v7a*)
GNU_BUILD_ARCH=armv7-a
CROSSCOMPILE_PREFIX=arm-linux-androideabi-
TARGET_ARCH=arm
EXTRA_OPTIONS+=(
--extra-cflags=-mfpu=vfpv3-d16
--extra-cflags=-mcpu=cortex-a9
)
;;
esac
case $ARCH in
armeabi-v7a-hard)
APP_PLATFORM=android-19
EXTRA_OPTIONS+=(
--libm="-lm_hard"
--extra-cflags=-mhard-float
--extra-cflags=-D_NDK_MATH_NO_SOFTFP=1
--extra-ldflags=-Wl,--no-warn-mismatch
)
;;
armeabi-v7a)
APP_PLATFORM=android-8
;;
esac
SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-${TARGET_ARCH}"
;;
Windows)
;;
Linux)
;;
esac
${X264_SOURCE_DIR}/configure \
--prefix=/ \
--sysroot="$SYSROOT" \
--cross-prefix="$CROSSCOMPILE_PREFIX" \
--host=$GNU_BUILD_ARCH-$GNU_BUILD_OS \
"${EXTRA_OPTIONS[@]}" \
--disable-opencl \
--enable-pic \
--bit-depth=8 \
--chroma-format=420 \
--disable-interlaced \
--enable-static \
--disable-lavf \
--disable-avs \
--disable-swscale \
case $OS in
Android)
GNU_BUILD_OS=linux
EXTRA_OPTIONS+=(
--extra-cflags=-DANDROID
--extra-cflags=-gdwarf-2
)
case $ARCH in
armeabi-v7a*)
GNU_BUILD_ARCH=armv7-a
CROSSCOMPILE_PREFIX=arm-linux-androideabi-
TARGET_ARCH=arm
EXTRA_OPTIONS+=(
--extra-cflags=-mfpu=vfpv3-d16
--extra-cflags=-mcpu=cortex-a9
)
;;
esac
case $ARCH in
armeabi-v7a-hard)
APP_PLATFORM=android-19
EXTRA_OPTIONS+=(
--libm="-lm_hard"
--extra-cflags=-mhard-float
--extra-cflags=-D_NDK_MATH_NO_SOFTFP=1
--extra-ldflags=-Wl,--no-warn-mismatch
)
;;
armeabi-v7a)
APP_PLATFORM=android-8
;;
esac
SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-${TARGET_ARCH}"
;;
Windows)
;;
Linux)
;;
esac
${X264_SOURCE_DIR}/configure \
--prefix=/ \
--sysroot="$SYSROOT" \
--cross-prefix="$CROSSCOMPILE_PREFIX" \
--host=$GNU_BUILD_ARCH-$GNU_BUILD_OS \
"${EXTRA_OPTIONS[@]}" \
--disable-opencl \
--enable-pic \
--bit-depth=8 \
--chroma-format=420 \
--disable-interlaced \
--enable-static \
--disable-lavf \
--disable-avs \
--disable-swscale \
三、编译
1.export符号链接 --非常重要
export CYGWIN="winsymlinks:nativestrict"
2.cygwin的环境:
ANDROID_NDK_ROOT=$(cygpath -u "$ANDROID_NDK_ROOT")
ANDROID_ARM_TOOLCHAIN_ROOT=$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/
ANDROID_X86_TOOLCHAIN_ROOT=$ANDROID_NDK_ROOT/toolchains/x86-4.8/prebuilt/windows
export PATH=$PATH:$ANDROID_ARM_TOOLCHAIN_ROOT/bin:$ANDROID_X86_TOOLCHAIN_ROOT/bin
3.执行一下命令,编译脚本
TMP=$(cygpath -m "$TMP") \
ARCH=armeabi-v7a \
OS=Android \
ANDROID_NDK_ROOT=$(cygpath -m "$ANDROID_NDK_ROOT") \
X264_SOURCE_DIR=/cygdrive/e/soft/source/x264/x264 \
/cygdrive/e/qupai_code_eclipse/code/ThirdParty/Build/x264/Config.sh
4.执行make命令 这里使用的是NDK的make,而不是cygwin的make
"$ANDROID_NDK_ROOT/prebuilt/windows/bin/make" -j8
2.cygwin的环境:
ANDROID_NDK_ROOT=$(cygpath -u "$ANDROID_NDK_ROOT")
ANDROID_ARM_TOOLCHAIN_ROOT=$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/windows/
ANDROID_X86_TOOLCHAIN_ROOT=$ANDROID_NDK_ROOT/toolchains/x86-4.8/prebuilt/windows
export PATH=$PATH:$ANDROID_ARM_TOOLCHAIN_ROOT/bin:$ANDROID_X86_TOOLCHAIN_ROOT/bin
3.执行一下命令,编译脚本
TMP=$(cygpath -m "$TMP") \
ARCH=armeabi-v7a \
OS=Android \
ANDROID_NDK_ROOT=$(cygpath -m "$ANDROID_NDK_ROOT") \
X264_SOURCE_DIR=/cygdrive/e/soft/source/x264/x264 \
/cygdrive/e/qupai_code_eclipse/code/ThirdParty/Build/x264/Config.sh
4.执行make命令 这里使用的是NDK的make,而不是cygwin的make
"$ANDROID_NDK_ROOT/prebuilt/windows/bin/make" -j8
注意,里面有些是我自己的脚本的路径,需要自己去替换一下.如:
X264_SOURCE_DIR=/cygdrive/e/soft/source/x264/x264 \ --------这是源码地址
/cygdrive/e/qupai_code_eclipse/code/ThirdParty/Build/x264/Config.sh ------这是脚本地址