? ? ? ? 首先在Linux(RHEL7.0)上安裝gcc:yum install gcc gcc-c++ -y? ?其中gcc-c++是為了能夠編譯c++源代碼,即g++。
? ? ? ? gcc為Linux C/C++下重要的編譯環境,是GUN項目中符合ANSIC標準的編譯系統, gcc可以編譯C、C++、Objective-C、Java、Fortran、Pascal等多種語言,而且gcc還是一個交叉平臺編譯器(跨平臺)。
? ? ? ? gcc是一組編譯工具的總稱,其軟件包里包含眾多的工具:C編譯器(cclplus等)、C++編譯器(c++、g++、cclplus等)、源碼預處理程序(cpp、cpp0)、庫文件(libgcc.a、libgcc_eh.a、libgcc_s.so、libiberty.a、libstdc++.[a,so]、libsupc++.a)。
? ? ? ? 具體的編譯過程分為4個階段:預處理、編譯、匯編和鏈接。可以根據自己的需要讓gcc在編譯的任何階段結束,以便檢查或使用gcc在該階段的輸出信息,或者對最后生成的二進制文件進行控制,以便通過加入不同數量和種類的調試代碼來為今后的調試做好準備。gcc編譯環境還提供了靈活而又強大的代碼優化功能。
? ? ? ? gcc通過文件的后綴名來區別輸入文件的類別: .c ?C語言源代碼文件? ? .C /.cc /.cxx/.cpp C++源代碼文件? ??.m Objective-C源代碼文件? ? ? ? .i 經預處理過的C源代碼文件? ? ??.ii 經預處理過的C++源代碼文件? ? ??.s 匯編語言源代碼文件(匯編語言)? ? ? ?.S 經過預處理的匯編語言源代碼文件(匯編語言)? ? ? ??.a 由目標文件構成的檔案庫文件(機器語言,二進制文件)? ? ? ? .h 頭文件? ? ???.o/.obj 目標文件(機器語言,二進制文件)? ? ? ? 其實任意一種高級語言在計算機上的執行過程如下: 首先進行預處理(處理各種宏定義等);接下來,高級語言(如C++、python等)在高級語言機器(虛擬機器)上被編譯程序翻譯為匯編語言程序;然后,匯編語言程序在匯編語言機器(虛擬機器)上被匯編程序翻譯為機器語言程序(目標代碼); 接著,機器語言程序在操作系統機器上解釋操作系統;然后,機器語言程序在機器語言機器上被解釋為一個個微程序;最后,這些微程序的每一條微指令在微指令系統上直接執行。綜上,大概經歷以下過程:預處理、編譯、匯編、鏈接,最終成為一個可執行的二進制文件。
? ? ? ? /usr/lib:存放了一些頭文件與庫文件。? ? /usr/include:這個目錄及其子目錄下包含程序所需要的頭文件。 一般庫文件放在/lib? ?/usr/lib和/usr/local/lib中,而頭文件放在/usr/include中。? ? ? ?/usr/bin/g++和/usr/bin/gcc:編譯程序,即實際在命令行中所執行的程序
? ? ? ? c源程序(以.c為擴展名的文本文件),預處理(include包含、宏定義等),編譯成匯編語言,匯編器將匯編語言進行匯編形成目標文件(目標語言,以.o或.obj為擴展名的文件),目標文件在與c語言的函數庫進行鏈接形成最終的可執行文件。
? ? ? ? 對于某些集成開發環境,如VC和VS等,它們把預處理器(預處理程序)、編譯器(編譯程序)、匯編器(匯編程序,gcc、g++等)、鏈接器(鏈接程序)、某些語言頭文件、某些語言庫文件(標準輸入、標準輸出等,如printf函數和scanf函數)和系統調用接口、socket都集中在了一個軟件中,形成一個語言開發項目的平臺,即集成開發環境。
? ? ? ? 軟件開發的周期:分析問題、源程序的編輯、預處理、編譯、鏈接、調試、運行的順序。編譯和鏈接過程中出現問題,則返回到編輯步驟重新對源程序進行檢查,修改代碼。調試過程中出現了問題,則說明對問題本身的分析就出現了問題(如需求等),算法錯誤,需要重新對問題進行分析,修正算法。
?
?