Android的交叉編譯工具

來源:互聯網
上載者:User

一直以來自己對Android的交叉編譯工具認識的不夠清晰,通常在Linux上編譯應用程式時通常需要安裝交叉編譯器,但是移植Android很長時間了,自己的虛擬機器裡面也沒有安裝任何的交叉編譯工具,Android也能順利的編譯通過,自己從網上查了相關的資料,才弄明白了這些。

 

    Android所用的Toolchain(即交叉編譯工具鏈)可從下面的網址下載: http://android.kernel.org/pub/android-toolchain-20081019.tar.bz2。

 

   如果下載了完整的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,其原始碼位於” /build/tools/apriori”

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

 

本文章摘自http://www.top-e.org/jiaoshi/html/?151.html,感謝網友這篇文章,對android的編譯器有了一定的認識。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.