在Android-x86 NDK编译中使用YASM
来源:互联网 发布:c语言程序生成exe文件 编辑:程序博客网 时间:2024/05/23 23:06
在PC平台上,游戏和多媒体应用使用了大量的SIMD(Single Instruction Multiple Data)指令来提高运行速度。但是将这些旨在提高应用运行性能的SIMD代码移植到Android x86平台的时候,我们往往不得不放弃这些代码,从android-ndk-r9d开始,采用yasm提供在Android x86平台下NDK编译时对汇编的支持。
一、什么是YASM编译器
Yasm是一个完整的重写的NASM汇编器,它是一个基于DSD协议下的开源软件,其官网地址为 http://yasm.tortall.net。
Yasm当前支持x86和AMD64指令集,支持NASM和GAS汇编符号,输出包括: ELF32, ELF64, 32和64位Mach-O, RDOFF2, COFF, Win32和Win64等二进制目标格式,并可以生成在STABS, DWARF2和 CodeView 8格式的源代码调试信息。
Yasm也提供了一些常用的数学函数,比如FFT变换,开发者只需要在代码中直接调用这些函数就可以获得最好的执行效率,一些众所周知的开源项目,比如FFMEG,X264,MPC-HC等使用Yasm汇编。
二、在Android NDK (x86) 中使用压 yasm
以FFMPEG为例,通常需要添加–disable-yasm选项,在编译arm版本时,这是正确也是必须的(arm 使用neon),但是在编译x86版本时,disable-yasm将导致大量的SIMD优化代码无法使用,从而显著降低性能。因此我们需要在Android NDK编译中添加ASM汇编支持。
从http://yasm.tortall.net下载Yasm, 将yasm.exe文件复制到系统目录下,比如system32下,这样就无需指定yasm.exe文件的所在路径。
使用yasm编译FFMPEG, 不再加上–disable-asm, 重新配置FFMPEG,可以看到在配置好的config.h中#define HAVE_YASM 1。在config.mk包含HAVE_YASM=yes。
定义LOCAL_YASMFLAGS = -DANDROID -DPIC -DHAVE_AV_CONFIG_H -DARCH_X86_32,重新执行ndk-build就可以得到在Android x86平台下完全优化的FFMPEG库。
- 在Android-x86 NDK编译中使用YASM
- 在Android NDK中编译和使用Box2D
- Android:在Eclipe中使用NDK编译C/C++工程
- 利用yasm在vs2008中进行X86汇编与C/C++相互调用
- ubuntu中使用android ndk编译ffmpeg.
- NDK 如何在Android中使用编译好的.so库
- 在Android NDK 中使用STLport(译)
- 在Android NDK中使用libffmpeg.so
- 在Android中使用NDK调用OpenGl
- 在Android Studio中使用NDK
- 在Eclipse中编译Android NDK代码的方法
- 在64位Ubuntu下面使用Android NDK编译Tvheadend
- 在64位Ubuntu下面使用android NDK编译nginx
- 在windows上编译openssl供Android NDK使用
- android ndk x86 Support
- 使用Android NDK编译ffmpeg
- 使用android-ndk编译SDL
- Android 使用CMake 编译NDK
- Vue之嵌套router传参params与query
- 【转载】关于异常初步
- 2017.11.6 近期学习自我反思与日后改善计划
- 5.1
- BZOJ1089 [SCOI2003]严格n元树 【dp + 高精】
- 在Android-x86 NDK编译中使用YASM
- 搭建网站
- 单链表元素定位(输出链表中元素的下标)
- shell 编程
- LightOJ-1341
- GitLab的使用(一)---安装
- 由一道关于位运算的程序设计题引发的思考
- Spring 架构篇——Spring Boot 整合 MongoDB
- c#跨窗体传值_构造函数.子传父