【转】armeabi和armeabi-v7a

原文网址: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。java

      在android.mk里可配置如下宏:android

TARGET_CPU_API := armeabi架构

APP_ABI := armeabiapp

 

当你编译时出现一些连接动态库的undefine错误,或你的apk运行时出现装载.so动态库错误时,不妨看一下这个cpu类型的配置是否有误。函数

========================================================================================================工具

如今还有x86的了,其实armeabi 、armeabi-v7a 和x86是编译 NDK 库时,可使用三种支持的应用二进制接口(ABI):性能

  1. ‘armeabi’ – 默认选项,将建立以基于 ARM* v5TE 的设备为目标的库。 具备这种目标的浮点运算使用软件浮点运算。 使用此 ABI 建立的二进制代码将能够在全部 ARM* 设备上运行。
  2. ‘armeabi-v7a’ – 建立支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
  3. ‘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 寄存器。

 

原文网址:http://blog.csdn.net/fristkey2/article/details/7870593

android目录下的内容学习---abi

源码下面第一个文件的名称是abi,那么abi是什么?

    应用程序二进制接口(application binary interface,ABI) 描述了应用程序和操做系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口 。ABI不一样于API ,API定义了源代码和库之间的接口,所以一样的代码能够在支持这个API的任何系统中编译 ,然而ABI容许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 ABI掩盖了各类细节,例如:调用约定控制着函数的参数如何传送以及如何接受返回值;系统调用的编码和一个应用如何向操做系统进行系统调用;以及在一个完整的操做系统ABI中,对象文件的二进制格式、程序库等等。一个完整的ABI,像 Intel二进制兼容标准 (iBCS) ,容许支持它的操做系统上的程序不经修改在其余支持此ABI的操做体统上运行。其余的 ABI 标准化细节包括C++ name decoration和同一个平台上的编译器之间的调用约定,可是不包括跨平台的兼容性。在Unix的操做系统中,存在不少运行在同一件平台上互相相关可是不兼容的操做系统(尤为是80386兼容系统)。有一些努力尝试标准化A I,以减小销售商将程序移植到其余系统时所需的工做。然而,直到如今尚未很成功的例子,虽然LBS正在为Linux作这方面的努力。

    那目录下都有什么内容?

    abi-app:  Android.mk

                   include:

                   src:

    再看看include目录下的内容:

        -rw-r--r-- 1 ckt ckt 5220 2012-08-14 15:58 cxxabi.h
        -rw-r--r-- 1 ckt ckt 2539 2012-08-14 15:58 new
        -rw-r--r-- 1 ckt ckt 2661 2012-08-14 15:58 typeinfo
   再看看src目录下的内容:

      ckt@ckt-desktop:~/work/tuna/abi/cpp/src$ ls -Alh
      total 68K
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 array_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 class_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.7K 2012-08-14 15:58 delete.cc
      -rw-r--r-- 1 ckt ckt  13K 2012-08-14 15:58 dynamic_cast.cc
      -rw-r--r-- 1 ckt ckt 1.7K 2012-08-14 15:58 enum_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 function_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 fundamental_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 new.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 pbase_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 pointer_to_member_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 pointer_type_info.cc
      -rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 si_class_type_info.cc
-  rw-r--r-- 1 ckt ckt 2.6K 2012-08-14 15:58 type_info.cc
-rw-r--r-- 1 ckt ckt 1.8K 2012-08-14 15:58 vmi_class_type_info.cc

android的armeabi和armeabi-v7a

原文网址:http://gybin.iteye.com/blog/2031565

在ANE中若是SDK调用了so库,则须要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下。

能够贴个ADT代码说明问题:

 

//m_configType.equals("apk") 是不是发行模式
//(hasCaptiveRuntime() 是否带运行时
 if ((m_configType.equals("apk")) || (hasCaptiveRuntime()))
    {
      destApkDirectory = "lib/armeabi-v7a/";
    }
    else
    {
      destApkDirectory = "lib/armeabi/";
    }

 

 

而这个armeabi和armeabi-v7a到底是什么意思?

有什么深意么?

为何调试模式和发行模式adobe会选择不一样的文件夹?

我在这篇记录下我对于这个小问题的理解。

  • armeabi与armeabi-v7a表示支持不一样的CPU类型

armeabi是指的该so库用于ARM的通用CPU,而v7a的CPU支持硬件浮点运算。所以armeabi通用性强,但速度慢,而v7a能充分发挥v7a CPU的能力,在AIR打包APK调试模式adobe选择的是通用性强的armeabi模式。

 

  • android支持不一样CPU的深层含义

首先从硬件支持方便来看,咱们的adnroid设备目前为止大部分都是支持ARM芯片,(固然市面上此刻最新的android机器还支持intel等另外的几个芯片,例如intel最新的凌动项目芯片,就得到了android4.1的青睐)。从android版本与支持ARM硬件编码的程度来看:

起初android1.6:只支持armv4与armv5te指令集。

到了android2.0:增长了支持arm-vfp,armv6,armv6t2指令集。

到了android2.2:增长支持armv7-a指令集。

因此armeabi-v7a 应该是与AIR限定支持android2.2以上的条件有关。android2.2以上能让硬件发挥更大的做用。

  • 我项目中使用armeabi仍是armeabi-v7a

对于AIR项目来讲性能问题是最大的瓶颈,能优化一点就一点,因此若是接平台方SDK或者写ANE的时候使用到SO库,我的推荐所有放到armeabi-v7a下,而不要为了兼容放到armeabi。

-EOF-

 

在咱们android APK的根目录有一个 libs文件夹,此文件夹下包含了armeabi 和armeabi-v7a两个文件夹,咱们的c代码编译成的本地库(各类.so)就会放在这两个文件夹其中的一个。那armeabi-v7a 与 armeabi有什么区别,都是什么意思呢?

    armeabi和armeabi-v7a是表示cpu的类型,咱们知道通常的手机或平板都是用arm的cpu(mips的就悲催的被忽视了),不一样的cpu的特性不同,armeabi就是针对普通的或旧的arm v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。

      在android.mk里可配置如下宏:

TARGET_CPU_API := armeabi

APP_ABI := armeabi

 

当你编译时出现一些连接动态库的undefine错误,或你的apk运行时出现装载.so动态库错误时,不妨看一下这个cpu类型的配置是否有误。

========================================================================================================

如今还有x86的了,其实armeabi 、armeabi-v7a 和x86是编译 NDK 库时,可使用三种支持的应用二进制接口(ABI):

  1. ‘armeabi’ – 默认选项,将建立以基于 ARM* v5TE 的设备为目标的库。 具备这种目标的浮点运算使用软件浮点运算。 使用此 ABI 建立的二进制代码将能够在全部 ARM* 设备上运行。
  2. ‘armeabi-v7a’ – 建立支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。
  3. ‘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 寄存器。

相关文章
相关标签/搜索