随着Android的蓬勃发展, CPU的架构也越来越多. 早期只支持ARMv5, 截至目前, 支持的架构已达三类七种: ARM(ARMv5,ARMv7 (从2010年起),ARMv8), x86(x86 (从2011年起),x86_64 (从2014年起)) ,MIPS(MIPS (从2012年起),MIPS64). 众多架构使用的指令集不尽相同, 与相应的ABI关联: armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64. 所以, NDK编译不同架构的库要选择不同的ABI.

不同ABI的分支节点在NDK根目录的toolchains目录和不同版本SDK目录中 (我的NDK根目录为/home/ndk/android-ndk-r10e), 选择不同的ABI主要涉及以下几点:

  $NDK: NDK根目录

  $ABI: 相应的ABI目录名

  $PLATFORM: SDK版本目录名

  1. 不同的gcc编译器
    1. 在$NDK/toolchains/$ABI/prebuilt/linux-x86_64/bin, 例如ARMv7为 /home/ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
  2. 不同的g++编译器
    1. 在$NDK/toolchains/$ABI/prebuilt/linux-x86_64/bin, 例如ARMv7为 /home/ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++
  3. 其他相应的工具
    1. 都在$NDK/toolchains/$ABI/prebuilt/linux-x86_64/bin, 寻找相应的后缀, 例如nm则是 arm-linux-androideabi-nm
  4. 不同的include路径
    1. 包括两个部分: 架构目录 和 SDK目录
      1. 架构头目录: 在$NDK/toolchains/$ABI/prebuilt/linux-x86_64/include, 例如ARMv7为 /home/ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/include
      2. SDK头目录: 在$NDK/platforms/$PLATFORM/$ABI/usr/include, 例如ARMv7,SDK版本21为 /home/ndk/android-ndk-r10e/platforms/android-21/arch-arm/usr/include
  5. 不同的lib路径
    1. 包括两个部分: 架构目录 和 SDK目录
      1. 架构库目录:
        在$NDK/toolchains/$ABI/prebuilt/linux-x86_64/lib, 例如ARMv7为
        /home/ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib
      2. SDK库目录:
        在$NDK/platforms/$PLATFORM/$ABI/usr/lib, 例如ARMv7,SDK版本21为
        /home/ndk/android-ndk-r10e/platforms/android-21/arch-arm/usr/lib
  6. gcc编译寻找头文件和库文件的根目录
    1. 在$NDK/platforms/$PLATFORM/$ABI, 例如ARMv7,SDK版本21为 /home/ndk/android-ndk-r10e/platforms/android-21/arch-arm

以上为编译过多个NDK库的总结, 属于普遍性, 但各个库又具有特殊性, 具体还要添加什么参数, 还需特殊情况特殊处理

学术浅薄, 不足之处, 望请指出

参考:

  Android NDK 工具链的使用方法(Standalone Toolchain)

  Android开发实践:如何设置NDK的编译选项

NDK编译不同架构的参数的更多相关文章

  1. Linux下NDK编译FFMPEG包含neon参数

    FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...

  2. ndk编译出来的executable动态库入口函数的参数错乱

    早些时间用ndk编译带main入口函数的动态库,测试可运行.今天要作它用时,发现在这个入口函数并没有传入正确的参数. hello.cpp有main函数,用ndk分别编译成可执行文件和动态库文件,使两者 ...

  3. Android Studio 中关于NDK编译及jni header生成的问题

    之前由于工作原因使用grails这个基于groovy的框架做项目,对groovy感觉很好. 基于groovy的gradle构建系统对我而言自然也是好的没得说. Android Studio 正式版出来 ...

  4. anroid ndk编译ffmpeg 引用librtmp libx264

    Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完 ...

  5. ndk编译时的通用Android.mk文件

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := live555 MY_SRC_PATH := $(LOCAL_PA ...

  6. arm 及ndk编译

        首页  »   Android android的armeabi跟armeabi-v7a 网友分享于:2014-03-16  浏览:867次 android的armeabi和armeabi-v7 ...

  7. ndk 编译 boost 库,支持serialization

    Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C+ ...

  8. 浅谈独立使用NDK编译库文件(Android)

    阅读前准备 这是一篇相对入门的文章.文中会涉及到少许NDK的知识,但个人认为对初学者来说都相对比较实用,因为都是在平时项目中遇到的(目前自己也是初学者).一些其他高深的技术不再本文探讨范围之内(因为我 ...

  9. android NDK编译(导入).a文件和编译多个so文件(转)

    源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a LOCAL_PATH := $(call my-dir) include ...

随机推荐

  1. php代码审计1(php.ini配置)

    1.php.ini基本配置-语法 大小写敏感directive = value(指令=值)foo=bar 不等于 FOO=bar 运算符| & - ! 空值的表达方法foo =     ;fo ...

  2. 【转】检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问

    源地址:https://www.cnblogs.com/love522/p/4462253.html 最近在做一个网站时,有一个下载word文档功能,在本地直接调试是可以下载的,但部署到IIS上就出现 ...

  3. [BZOJ2879][Noi2012]美食节(费用流)

    题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...

  4. 洛谷P1251 餐巾计划问题(费用流)

    传送门 不得不说这题真是思路清奇,真是网络流的一道好题,完全没想到网络流的建图还可以这么建 我们把每一个点拆成两个点,分别表示白天和晚上,白天可以得到干净的餐巾(购买的,慢洗的,快洗的),晚上可以得到 ...

  5. Python之路系列:面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子: class ...

  6. redis incr自增指定的无限期 key 删除问题

    不得不说,最近在使用redis的incr的功能的时候,着实是踩了不少的坑啊! 前面我写的一篇文章里面,我提到通过incr产生的键在用普通的get的方式去获取的时候,是获取不到的,所以我不得不通过特殊的 ...

  7. AtCoder - 2568 最小割

    There is a pond with a rectangular shape. The pond is divided into a grid with H rows and W columns ...

  8. AR资料汇总学习

    ARKit 从入门到精通 http://www.chinaar.com/ARKit/5210.html ARKit 框架的学习 http://blog.csdn.net/biangabiang/art ...

  9. python之列表,元组,字典。

    在博主学习列表,元组以及字典的时候,经常搞混这三者.因为他们都是用括号表示的.分别是[],(),{}. 列表(list): [1,'abc',1.26,[1,2,3],(1,2,3),{'age:18 ...

  10. LeetCode231.2的幂

    231.2的幂 描述 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 示例 1: 输入: 1 输出: true 解释: 2^0 = 1 示例 2: 输入: 16 输出: true 解释 ...