NDK编译不一样架构的参数

    随着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.linux

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

  $NDK: NDK根目录架构

  $ABI: 相应的ABI目录名ide

  $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库的总结, 属于广泛性, 但各个库又具备特殊性, 具体还要添加什么参数, 还需特殊状况特殊处理ui

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

 

参考:spa

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

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

相关文章
相关标签/搜索