原文:http://blog.csdn.net/dxpqxb/article/details/7721156php
在咱们android APK的根目录有一个 libs文件夹,此文件夹下包含了armeabi 和armeabi-v7a两个文件夹,咱们的c代码编译成的本地库(各类.so)就会放在这两个文件夹其中的一个。那armeabi-v7a 与 armeabi有什么区别,都是什么意思呢?html
armeabi和armeabi-v7a是表示cpu的类型,咱们知道通常的手机或平板都是用arm的cpu(mips的就悲催的被忽视了),不一样的cpu的特性不同,armeabi就是针对普通的或旧的arm v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。android
在android.mk里可配置如下宏:架构
TARGET_CPU_API := armeabi工具
APP_ABI := armeabi性能
当你编译时出现一些连接动态库的undefine错误,或你的apk运行时出现装载.so动态库错误时,不妨看一下这个cpu类型的配置是否有误。
spa
========================================================================================================.net
如今还有x86的了,其实armeabi 、armeabi-v7a 和x86是编译 NDK 库时,可使用三种支持的应用二进制接口(ABI):orm
‘armeabi’ – 默认选项,将建立以基于 ARM* v5TE 的设备为目标的库。 具备这种目标的浮点运算使用软件浮点运算。 使用此 ABI 建立的二进制代码将能够在全部 ARM* 设备上运行。htm
‘armeabi-v7a’ – 建立支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
‘x86’ – 生成的二进制代码可支持包含基于硬件的浮点运算的 IA-32 指令集。
==========================================================================================================
什么是 NEON?
NEON* 是一种 ARM* 技术,主要用于多媒体(智能手机和高清电视等)应用。 ARM* 表示其基于 128 位 SIMD 引擎的技术 – ARM* Cortex*(一种串行扩展)—可提供比 ARM* v5 架构至少高 3 倍的性能,以及比 ARM* v6 至少高 2 倍的性能。 如欲了解有关此技术的详细信息,以深刻了解 NEON 及其它性能考虑,请访问如下网址: http://www.arm.com/products/processors/technologies/neon.php
此处的关键理念为,各寄存器被“堆积”成一个矢量,其中每个寄存器均为一个元素,并与其它元素的数据类型相匹配。 在此基础之上,运算在管道内执行,于是这一方法被称做 Packed SIMD。
SSE: 英特尔推出的相似 NEON 的工具
SSE 指面向英特尔架构(IA)的SIMD 流指令扩展。 目前,英特尔® 凌动™ 最高支持 SSSE3(补充 SIMD 流指令扩展 3)。 凌动™ 暂不支持 SSE4.x。后者也是一个 128 位引擎,用于打包浮点数据。 这一执行模式开始于 MMX 技术。SSx 是较新的技术,取代了 MMX。。 如欲了解详细信息,请参阅英特尔《IA-32 和 IA-64 软件开发人员手册》中的“第一卷: 基础架构”部分。网址为: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html。 目前,SSE 概述部分在 5.5 节。 它提供 SSE、SSE二、SSE3 和 SSSE3 的操做码。注意,数据运算一般会涉及处处理基于精度的打包浮点数值;而且须要在 XMM 寄存器之间,或在这些寄存器与内存之间批量传输数据。 XMM 寄存器主要用于取代 MMX 寄存器。