原文: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 寄存器。