SO檔案是Linux下共享庫檔案,它的檔案格式被稱為ELF檔案格式。由於Android作業系統的底層基於Linux系統,所以SO檔案可以執行在Android平臺上。
Android系統也同樣開放了C/C++介面供開發者開發Native程式。由於基於虛擬機器的程式語言JAVA更容易被人反編譯,因此越來越多的應用將其中的核心程式碼以C/C++為程式語言,並且以SO檔案的形式供上層JAVA程式碼呼叫,以保證安全性。
擴充套件資料:
so檔案使用方法:
(1)動態庫的編譯。這裡有一個頭檔案:so_test.h,三個.c檔案:test_a.c、test_b.c、test_c.c,我們將這幾個檔案編譯成一個動態庫:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 不用該標誌外部程式無法連線。相當於一個可執行檔案。
(2)動態庫的連結這裡有個程式原始檔 test.c 與動態庫 libtest.so 連結生成執行檔案 test:命令:$ gcc test.c -L. -ltest -o test命令:$ ldd test執行test,可以看到它是如何呼叫動態庫中的函式的。
SO檔案是Linux下共享庫檔案,它的檔案格式被稱為ELF檔案格式。由於Android作業系統的底層基於Linux系統,所以SO檔案可以執行在Android平臺上。
Android系統也同樣開放了C/C++介面供開發者開發Native程式。由於基於虛擬機器的程式語言JAVA更容易被人反編譯,因此越來越多的應用將其中的核心程式碼以C/C++為程式語言,並且以SO檔案的形式供上層JAVA程式碼呼叫,以保證安全性。
擴充套件資料:
so檔案使用方法:
(1)動態庫的編譯。這裡有一個頭檔案:so_test.h,三個.c檔案:test_a.c、test_b.c、test_c.c,我們將這幾個檔案編譯成一個動態庫:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 不用該標誌外部程式無法連線。相當於一個可執行檔案。
(2)動態庫的連結這裡有個程式原始檔 test.c 與動態庫 libtest.so 連結生成執行檔案 test:命令:$ gcc test.c -L. -ltest -o test命令:$ ldd test執行test,可以看到它是如何呼叫動態庫中的函式的。