高煥堂談:Android與Cross Compiler之關係
---- 在Ubuntu/Linux/X86 環境裡使用2007q3-51交叉編譯C程式,然後放入Android裡執行。
l 何謂Cross compiler(交叉編譯器)?
Cross Compiler主要在資源較豐富的電腦上執行,而編譯出能在別的電腦上執行的目的碼(Object Code)。例如,當我們想寫個C程式,讓它能在Android手機裡跑。Android手機的ARM-CPU及記憶體容量都很小,我們無法在資源有限的Android/ARM裡進行編輯及編譯C程式。可行的方法是:在X86 PC環境裏編輯C程式,然後使用Cross Compiler去編譯出適合ARM-CPU裡執行的目的碼。這稱為Cross Compiler。
l 安裝ARM GNU/Linux 交叉編譯器
在Ubuntu裡安裝交叉編譯器的步驟是:
Step-1. 在Ubuntu畫面上,直接上網:
Step-2. 選取2007q3-51版,並下載:
Step-3. 這會自動安裝於 /home/tom/arm-2007q3/裡。
Step-4. 這樣,交叉編譯器就安裝完成了。
l 使用Cross Compiler編譯C函數,放入Android裡執行。
可先將.h和.c程式碼存於自訂的Proj_01檔案夾裡,如下:
l 開始進行交叉編譯C程式碼
接下來,對HalfAdder.c和 com_misoo_gx05_NativeJniAdder.c兩個程式檔,進行編譯,
將 產生.o的目的程式(Object Code)檔。
*** 編譯HalfAdder.c程式 ***
*** 編譯com_misoo_gx05_NativeJniAdder.c程式 ***
從畫面可看到他已經產出了兩個ARM-based的 .o 目的程式檔了。
l 連結出可在ARM上執行的 .so程式檔
對HalfAdder.o和 com_misoo_gx05_NativeJniAdder.o兩個目的程式檔,
進行連結而產生.so的共享程式檔案,使用下述命令:
l 將libNativeJniAdder.so共享程式檔拷貝並放置到Android模擬器裡
例如,在Windows環境。
Step-1. 先將.so檔案拷貝到c:/android-sdk-windows-1.0_r1/tools/裡。
Step-2. 啟動模擬器。
Step-3. 進入c:/android-sdk-windows-1.0_r1/tools/,並使用adb push命令
將.so檔案,存入模擬器的/system/lib/裡。
l 撰寫主程式去呼叫這libNativeJniAdder.so共享程式
在Android的Java程式可輕鬆地透過JNI去呼叫此.so程式庫。
也可以再利用Cross Compiler編譯一個C主函數(main())去呼叫它。
~ END ~
(by Misoo團隊)