利用ndk交叉编译x264到arm平台(带neon版本)

来源:互联网 发布:豆角台剧网下载软件 编辑:程序博客网 时间:2024/04/28 03:02
啊 ,又是编译, 最近搞平台移植,版本整合真的很烦人啊!!!!
重复工作很多有木有, 细细碎碎有木有?!! 老是报错有木有?!  完全没有编码的成就感有木有?!! 烦都烦死了有木有?!! 还不得不搞有木有?!!!  
干活。。。。。

概述:
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 选项,因为感觉不可控

原创粉丝点击