[Cmake-Android音視頻]SDK,NDK基本介紹

[Cmake-Android]音視頻總結:

 

SDK常用目錄

  • platform-tools:該文件夾下存放了Android平臺的相關工具,比如adb.exe,sqlite3.exe等。
  • platforms:不同版本的SDK
  • ndk-bundle:ndk目錄
  • tools:Android開發,調試的工具,性能監控
  • sources:當前版本的源碼

 

NDK

Android NDK是一套允許您使用原生代碼語言(例如C,C++)實現部分應用的工具集。在開發某些類型的應用時(比如音視頻應用),可以重複使用以這些語言編寫的代碼庫。

NDK常用目錄(ndk-bundle)

  • platforms:系統依賴庫
  • toolchains:交叉編譯工具, gcc ,ld

 

交叉編譯

交叉編譯:就是在一個平臺(如PC)上生成另一個平臺(Android,Ios或者其他嵌入設備)的可執行 代碼。

比如: 在x86的機器上編譯出arm上的程序

           在linux平臺上編譯arm上的程序

無論是自行安裝PC上的編譯器,還是下載其他平臺(Android或者iOS)的交叉工具編譯鏈,它們都會提供以下幾個工具:CC、AS、AR、LD、NM、GDB。

CC:編譯器,對C源文件進行編譯處理,生成彙編文件。

AS:將彙編文件生成目標文件(彙編文件使用的是指令助記符,AS將它翻譯成機器碼)。

AR:打包器,用於庫操作,可以通過該工具從一個庫中刪除或者增加目標代碼模塊。

LD:鏈接器,爲前面生成的目標代碼分配地址空間,將多個目標文件鏈接成一個庫或者是可執行文件。

GDB:調試工具,可以對運行過程中的程序進行代碼調試工作。

STRIP:以最終生成的可執行文件或者庫文件作爲輸入,然後消除掉其中的源碼。

NM:查看靜態庫文件中的符號表。

Objdump:查看靜態庫或者動態庫的方法簽名。

 

交叉編譯中有兩個需要注意的點:

第一:在哪個平臺上運行交叉編譯工具

第二:編譯的程序是在哪個平臺上執行

 

動態庫:在編譯的時候只把庫函數的地址寫到執行文件當中,在運行的時候再根據庫函數的地址去加載動態鏈接庫

靜態庫:在編譯的時候直接把源碼複製到執行文件或者庫當中

 

應用二進制界面(ABI)

  • 不同的Android手機使用不同的CPU, 因此支持不同的指令集。
  • CPU與指令集的每種組合都有其自己的應用二進制界面,即ABI

ABI包含以下信息:

  • CPU指令集
  • 內存字節順序
  • 可執行二進制文件的格式
  • 解析的各種約定。對齊限制,堆棧使用和調用函數
  • 庫集

支持的ABI

每個 ABI 支持一個或多個指令集。如下表:

 

NEON

NEON 提供標量/矢量指令和寄存器(與 FPU 共享,armeabi默認),主要用來進行浮點運算

-mfpu = vfp (浮點協處理器)

-mfpu = neon 指定是否使用neon

-march = armv7-a

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章