Android Toolchain與Bionic Libc

(源:http://blog.csdn.net/topembedded/article/details/3492649)

Android所用的Toolchain(即交叉編譯工具鏈)可從下面的網址下載:

http://android.kernel.org/pub/android-toolchain-20081019.tar.bz2。如果下載了完整的Android項目的源代碼,則可以在“<your_android>/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin”目錄下找到交叉編譯工具,比如Android所用的arm-eabi-gcc-4.2.1。

Android並沒有採用glibc作爲C庫,而是採用了Google自己開發的Bionic Libc,它的官方Toolchain也是基於Bionic Libc而並非glibc的。這使得使用或移植其他Toolchain來用於Android要比較麻煩:在Google公佈用於Android的官方Toolchain之前,多數的Android愛好者使用的Toolchain是在http://www.codesourcery.com/gnu_toolchains/arm/download.html 下載的一個通用的Toolchain,它用來編譯和移植Android 的Linux內核是可行的,因爲內核並不需要C庫,但是開發Android的應用程序時,直接採用或者移植其他的Toolchain都比較麻煩,其他Toolchain編譯的應用程序只能採用靜態編譯的方式才能運行於Android模擬器中,這顯然是實際開發中所不能接受的方式。目前尚沒有看到說明成功移植其他交叉編譯器來編譯Android應用程序的資料。

與glibc相比,Bionic Libc有如下一些特點:

-          採用BSD License,而不是glibc的GPL License;

-          大小隻有大約200k,比glibc差不多小一半,且比glibc更快;

-          實現了一個更小、更快的pthread;

-          提供了一些Android所需要的重要函數,如”getprop”, “LOGI”等;

-          不完全支持POSIX標準,比如C++ exceptions,wide chars等;

-          不提供libthread_db 和 libm的實現

 

另外,Android中所用的其他一些二進制工具也比較特殊:

-          加載動態庫時使用的是/system/bin/linker而不是常用的/lib/ld.so;

-          prelink工具不是常用的prelink而是apriori,其源代碼位於” <your_android>/build/tools/apriori”

-          strip工具也沒有采用常用的strip,即“<your_android>/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin”目錄下的arm-eabi-strip,而是位於<your_android>/out/host/linux-x86/bin/的soslim工具。

發佈了23 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章