开发者社区> 问答> 正文

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

利用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 选项,因为感觉不可控

展开
收起
爱吃鱼的程序员 2020-06-22 19:38:07 931 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    为什么我的x264没有--enable-thread选项

    2020-06-22 19:38:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载