http://blog.csdn.net/shulianghan/article/details/18964835
- 交叉編譯庫文件
C代碼執行 : C代碼被編譯成庫文件之后, 才能執行, 庫文件分為動態庫 和靜態庫 兩種;
-- 動態庫 : unix環境下.so 后綴的是動態庫, windows環境下.dll 后綴的是動態庫; 動態庫可以依賴靜態庫加載一些可執行的C代碼;
-- 靜態庫 :.a 后綴是靜態庫的擴展名;
庫文件來源 : C代碼 進行 編譯 鏈接操作之后, 才會生成庫文件, 不同類型的CPU 操作系統 生成的庫文件是不一樣;
-- CPU分類 : arm結構, 嵌入式設備處理器; x86結構, pc 服務器處理器; 不同的CPU指令集不同;
-- 交叉編譯 :windows x86編譯出來的庫文件可以在arm平臺運行的代碼;
-- 交叉編譯工具鏈 : Google提供的 NDK 就是交叉編譯工具鏈, 可以在linux環境下編譯出在arn平臺下執行的二進制庫文件;
NDK作用 : 是Google提供了交叉編譯工具鏈, 能夠在linux平臺編譯出在arm平臺下執行的二進制庫文件;
NDK版本介紹 : android-ndk-windows 是在windows系統中的cygwin使用的, android-ndk-linux 是在linux下使用的;
(1) Android.mk文件講解
Android.mk文件內容 :
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
獲取當前文件內容 : $(call my-dir) 是編譯器中的宏方法, 調用該宏方法, 就會返回前的目錄路徑;
賦值符號 : " := " 是賦值符號, 第一句話 是 返回當前文件所在的當前目錄, 并將這個目錄路徑賦值給 LOCAL_PATH;
初始化編譯模塊參數 : $(CLEAR_VARS) 作用是將編譯模塊的參數初始化, LOCAL_MODULE LOCAL_SRC_FILES 也是這樣的參數;
指定編譯模塊 : LOCAL_MODULE := hello , 指定編譯后的 so 文件名稱, 編譯好之后系統會在該名稱前面加上 "lib", 后綴加上 ".so";
指定編譯源文件 : LOCAL_SRC_FILES := hello.c 告訴編譯系統源文件, 如果有多個文件那么就依次寫在后面即可;
編譯成靜態庫 : include $(BUILD_SHARED_LIBRARY), 作用是高速系統, 編譯的結果編譯成 .so 后綴的靜態庫;
靜態庫引入 : NDK的platform中有很多 ".a" 結尾的動態庫, 我們編譯動態庫的時候, 可以將一些靜態庫引入進來;