利用ndk交叉编译x264到arm平台(带neon版本)
博文源地址:
http://blog.sina.com.cn/s/blog_4868f9860101923t.html
欢迎大家去我的博客坐坐
概述:
x264的编译和之前我们看到的osip、ortp类似
也是利用编译的默认参数 CFLAG 、 LD、 CC等参数来控制编译目标
编译过程也是三步走:
1)configure
2)make
3)make install
X264版本:
x264用的是最近的稳定版本:x264-snapshot-20130507-2245-stable
下载地址:
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
注意事项
1) 这些编译参数都在configure 脚本中可以看到定义, 但是用configure -h 看不到提示。所以不要以为这些默认参数就没有使用, 当然你也可以利用 --extra-asflags、 --extra-cflags --extra-ldflags
--extra-rcflags 这些选项来带上必要参数。 但是对于gcc、 汇编编译器、 链接器还是要通过CC、AS、LD指定
2) 优化带neon, CFLAGS里面必须带上这些参数: -march=armv7-a -mfloat-abi=softfp -mfpu=neon
3)configure 执行成功的时候注意检查一下 config.log 和 config.mak.尤其是config.mak里面看看有没有什么编译参数被遗漏了。 比如我一开始没有指定AS, 于是在编译.S文件的时候总是报错,仔细一看才发现make用了linux的gcc做汇编编译,那必然报错。
编译脚本
贴一下脚本。
#!/bin/sh
export TMPDIR="/tmp/"
export NDKROOT="/opt/android-ndk-r8c"
export PRJ_ROOT="/home/hl/linphone_3.5.2"
export PREBUILT=$NDKROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86
export SYSROOT=$NDKROOT/platforms/android-9/arch-arm
export CC=$PREBUILT/bin/arm-linux-androideabi-gcc
export LD=$PREBUILT/bin/arm-linux-androideabi-ld
export AS=$PREBUILT/bin/arm-linux-androideabi-gcc
export AR=$PREBUILT/bin/arm-linux-androideabi-ar
export RANLIB=$PREBUILT/bin/arm-linux-androideabi-ranlib
export STRIP=$PREBUILT/bin/arm-linux-androideabi-strip
CFLAGS="--sysroot=$NDKROOT/platforms/android-9/arch-arm -fPIC -DX264_VERSION -DANDROID -DHAVE_PTHREAD -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -march=armv7-a -fomit-frame-pointer -mfloat-abi=softfp -mfpu=neon -I$NDKROOT/platforms/android-9/arch-arm/usr/include"
export CFLAGS
LDFLAGS="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=$NDKROOT/platforms/android-9/arch-arm/usr/lib -L$NDKROOT/platforms/android-9/arch-arm/usr/lib -nostdlib -lc -lm -ldl -lgcc"
export LDFLAGS
./configure --prefix=$PRJ_ROOT/libs -cross-prefix=arm-linux-androideabi --host=arm-linux --enable-pic --enable-strip --enable-thread --enable-static
这个编译脚本中没有用到 --sysroot选项和 --cross-prefix 选项,因为感觉不可控