Android系統如何運行動態編譯的程式
android系統底層使用了linux的核心,但在檔案系統上與linux有所差異。我們可以通過Google提供的ADB工具進入android系統的linux命令終端。但是不能執行我們在PC上通過arm-linux-gcc等交叉編譯器動態編譯出來的應用程式,比如如下指令:
arm-linux-gcc mc.c -o mc
然後用adb push將可執行程式複製到android系統/data/local中,接著改變許可權:
adb shell chmod 777 /data/local/mc
最後進入/data/local目錄執行應用程式:
./mc
會提示如下:
1|root@android:/data/local # ./mc
/system/bin/sh: ./mc: No such file or directory
這就說明系統中找不到所需要的連結庫,而如果是在arm-linux系統下,可以順利執行。這就說明android系統中缺少linux系統中的這些依賴庫。當然如果加上-static選項靜態編譯可以解決問題,不過靜態編譯出來的檔案往往比動態編譯出來的檔案大幾十倍,一個簡單的makefile可能會到五百多KB。對於長久來看這是很不划算的。我們可以從linux的檔案系統中找到這些庫。方法如下:
首先在linux源碼中找到檔案系統壓縮包:file_system.tar.gz。
解壓
tar xzvf file_system.tar.gz
然後複製lib裡面的所有內容到android的/lib目錄下:
adb push lib /lib
這時候,linux裡的庫檔案就可以在android中找到了。這時候回到android系統的/data/local目錄,再次執行即可執行靜態編譯的檔案了。
另外,如果在linux系統下,我們可以通過配置環境變數或者將mc可執行檔放到/bin目錄下,這樣可以在任何路徑下執行這個命令。那麼在android系統中有沒有類似操作呢?當然是可以的,我們將可執行檔mc放在/system/bin目錄下即可,是不是很方便呢?
大家如果還有什麼疑問可以在下面留言,大家共同探討~~