Android NDK祕籍--淺析靜態庫和動態庫

此篇文章介紹在Android NDK開發中靜態庫和動態庫的知識,主要是編譯C/C++庫和調用C/C++庫的方法和場景。json

本文第三部分是爲了接下來的幾篇文章作鋪墊,也是本系列中最重要的幾篇。函數

本文目錄:測試

1.靜態庫介紹code

2.動態庫介紹開發

3.總結靜態庫和動態庫的幾種編譯和調用場景源碼

1.靜態庫介紹

靜態庫:編譯

1.全名是靜態連接庫(Static Library),後綴是.a,例如libcjson.aclass

2.調用靜態庫的程序在編譯時會將靜態庫所有編譯到目標代碼中,因此程序運行環境中再也不須要靜態庫,而且靜態庫文件體積較大程序

3.調用靜態庫時,若是對靜態庫中的函數內容進行改變,不只須要從新編譯靜態庫,還須要對調用靜態庫的程序從新編譯,將靜態庫編譯到目標代碼中。方法

2.動態庫介紹

動態庫:

1.全名是動態連接庫(Shared Library),後綴是.so,例如libcjson.so

2.調用動態庫的程序在編譯時不能將動態庫編譯到目標代碼中,程序執行到相關函數時纔會連接該動態庫對應的函數,因此程序運行環境中必須提供動態庫,而且動態庫文件體積較小

3.調用動態庫時,若是對動態庫中的函數內容進行改變,只須要從新編譯動態庫,不須要對調用動態庫的程序從新編譯,即不須要干預目標代碼,直接用新的動態庫替換掉舊的動態庫便可

3.總結靜態庫和動態庫的幾種編譯和調用場景

在通過屢次NDK測試與驗證後,總結了靜態庫和動態庫的幾種編譯和使用場景,整體能夠分爲3種狀況:

1.將C/C++的源碼直接編譯成靜態庫,只能提供給底層調用。

注:比較適用於將第三方開源庫編譯成靜態庫,也能夠將本身寫的源碼編譯成靜態庫,給本身或其餘人的底層調用。

2.將C/C++的源碼直接編譯成動態庫,不須要封裝JNI層,提供給底層調用。

注:比較適用於將本身寫的源碼編譯成動態庫,也能夠將第三方開源庫編譯成動態庫,給本身或其餘人的底層調用。

3.將C/C++的源碼進行JNI層封裝後,編譯成動態庫,提供給上層調用。

注:比較適用於將本身寫的源碼進行JNI封裝後,連同jar包一塊兒,給本身或其餘人的上層調用。

接下來的文章會詳細講解靜態庫和動態庫的編譯方法和調用場景。

相關文章
相關標籤/搜索