編輯:關於Android編程
GCC編譯器(GNG C Compiler)是GNU項目中符合ANSI C標准的編譯系統,能夠編譯C C++ Object C等語言編寫的程序,同時GCC也是一個交叉編譯器,特別使用於不同平台的嵌入式開發。
GNU:
GNU是“GNU is Not Unix"的遞歸縮寫,1984年,史托曼開始GNU項目,這個項目的目的是創建一個自由,開放的Unix操作系統(Free UNIX),剛開始史托曼參考UNIX上面的軟件,開發出功能類似的軟件,在開發期間並沒有看其他軟件的源代碼(為了避免版權糾紛),後來由於GNU軟件的免費,被很多人開始使用。並在之後使用他以前寫過的Emacs編譯器實現一個編譯二進制文件的編譯器(GCC)。到了1985年,為了避免GNU所開發的自由軟件被其他人所利用,所以起草了通用公共許可證(General Public Licence, GPL),其中主要觀念是:版權制度是促進社會進步的手段,版權本身不是自然權利。(詳細了解請進入GNU官網:http://www.gnu.org)。
ANSI C標准:C語言的第一個標准。
在Shell中輸入man gcc可以看到有關GCC的使用幫助,下面是關於C語言和C++的參數說明。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD48aW1nIHNyYz0="/uploadfile/Collfiles/20140821/2014082110461130.png" alt="\" />
幫助中包含一下幾個參數:
1、通用參數
2、c語言參數
3、c++參數
4、object c參數
5、語言無關參數
6、警告參數
7、調試參數
8、優化參數
9、編譯過程參數
10、機器依賴參數
編譯過程參有如下參數:
-c____只編譯不鏈接,生成目標文件。
-S____只編譯不匯編,生成匯編代碼。
-E____只預編譯
-g____包含調試信息
-o file____指定目標輸出文件
-ldir____搜索頭文件路徑
進入GNU官網(www.gnu.org)可以找到GCC的源代碼
我們下載一個最新的版本GCC 4.9.1 released,上面有svn檢出路徑,可以使用svn來check out到你的本地。
官方下載說明文檔(https://gcc.gnu.org/install/download.html)中說明了GCC所依賴的類庫以及工具。
將依賴的庫及GCC源碼下載並解壓縮如下:
進入到解壓後的gcc文件目錄,如下:
下面我們開始執行配置文件configure
在配置LOG中我們可以看到出現了錯誤,錯誤內容如下:
在編譯的時候需要的類庫找不到,並且告訴了我們這些類庫的最低版本要求,並提供了下載地址。下面我們來看一下這些所依賴的類庫之間的關系:
gmp是GNU的多精度數字運算類庫,需要依賴m4(大多數Ubuntu是默認安裝的)
mpfr是多精度浮點運算的c類庫,需要依賴gmp
mpc是一個復雜的高精度運算的數字運算c類庫,需要依賴gmp, mpfr
gcc需要依賴上面的類庫。
我們搞清楚了這些依賴關系,下面我們就開始從gmp編譯開始吧。
通過./configure --help/more 查看幫助可以看到默認安裝地址如下
好吧,下面我們就使用./configure命令,完成如下
接下來 使用make命令完成編譯 (可能需要一段時間),等編譯完成後我們執行安裝命令sudo make install
使用同樣的方法將其他類庫編譯。
將mpfr編譯後/usr/local/lib目錄下的文件如下(新增加了libmpfr開頭的文件):
mpc編譯後
最後再編譯gcc文件(大概編譯了1個多小時後完成)
注意:這裡系統可能找不到gcc編譯所需要的類庫,所以我們在編譯的時候加上類庫路徑, make --with-gmp= /usr/local/lib --with-mpfr=/usr/local/lib --with
完成後我們可以在/usr/local/bin目錄下看到gcc可執行文件,如何驗證這是我們自己安裝的gcc而不是系統默認提供的gcc,下面我們來看看版本號:
可以看到/usr/local/bin目錄下的gcc版本是4.9.1,這個正是我們下載的版本,另外我們可以看到文件的修改時間是今天。
抽象工廠應用是很廣的,在Android源碼中,這個IPolicy就是一個簡單的抽象工廠模式。下面分析一下IPolicy及其實現,以及創建的相關對象(源碼基於5.0.0)。
從意圖返回結果 startActivity()方法調用另一個活動,但並沒有返回結果給當前活動。此時如想從一個活動中回傳數據,就要使用startActivityFo
先來看看效果圖關鍵代碼1.監聽滾動事件首先要給listview添加setOnScrollListener監聽,注意這個監聽在recyclerView上是addOnScro
簡介KVO是一套當目標對象的屬性值改變時觀察者對象能夠接受到通知的機制。必須先理解KVC才能更好的理解KVO,前者是後者的實現基礎。這樣的通信機制在MVC設計模式很是常見