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.

    不同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的編譯選項


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM