linux程序編譯

一、安裝linux操作系統(ubuntu)。

        http://blog.csdn.net/sshhbb/article/details/6651807

二、學會最簡單linux操作命令。

       http://blog.csdn.net/sshhbb/article/details/6704626

三、學會使用vim編輯你的程序。

       http://blog.csdn.net/sshhbb/article/details/6705564

四、使用GCC編譯程序。

       gcc所遵循的部分約定規則:

  .c爲後綴的文件,C語言源代碼文件;

  .a爲後綴的文件,是由目標文件構成的檔案庫文件;

  .C,.cc或.cxx 爲後綴的文件,是C++源代碼文件;

  .h爲後綴的文件,是程序所包含的頭文件;

  .i 爲後綴的文件,是已經預處理過的C源代碼文件;

  .ii爲後綴的文件,是已經預處理過的C++源代碼文件;

  .m爲後綴的文件,是Objective-C源代碼文件;

  .o爲後綴的文件,是編譯後的目標文件;

  .s爲後綴的文件,是彙編語言源代碼文件;

  .S爲後綴的文件,是經過預編譯的彙編語言源代碼文件。

       

       gcc執行過程:

         

         當使用gcc時,gcc會完成預處理、編譯、彙編和連接。前三步分別生成目標文件,連接時,把生成的目標文件鏈接成可執行文件。gcc可以針對支持不同的源程序文件進行不同處理,文件格式以文件的後綴來識別.

        

在預處理階段,輸入的是C語言的源文件,通常爲*.c。它們通常帶有.h之類頭文件的包含文件。這個階段主要處理源文件中的#ifdef、 #include和#define命令。該階段會生成一箇中間文件*.i,但實際工作中通常不用專門生成這種文件,因爲基本上用不到;若非要生成這種文件不可,可以利用下面的示例命令:

gcc -E  test.c -o test.i

在編譯階段,輸入的是中間文件*.i,編譯後生成彙編語言文件*.s 。這個階段對應的GCC命令如下所示:

GCC -S test.i -o test.s

在彙編階段,將輸入的彙編文件*.s轉換成機器語言*.o。這個階段對應的GCC命令如下所示:

GCC -c test.s -o test.o

最後,在連接階段將輸入的機器代碼文件*.s(與其它的機器代碼文件和庫文件)彙集成一個可執行的二進制代碼文件。這一步驟,可以利用下面的示例命令完成:

GCC test.o -o test

         示例代碼 a.c:

  #include <stdio.h>

  int main()

  {

  printf("hello\n");

  }

  預編譯過程

  這個過程處理宏定義和include,並做語法檢查。

  可以看到預編譯後,代碼從5行擴展到了910行。

  gcc -E a.c -o a.i

  cat a.c | wc -l

  5

  cat a.i | wc -l

  910

  編譯過程

  這個階段,生成彙編代碼。

  gcc -S a.i -o a.s

  cat a.s | wc -l

  59

  彙編過程

  這個階段,生成目標代碼。

  此過程生成ELF格式的目標代碼。

  gcc -c a.s -o a.o

  file a.o

  a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped

  鏈接過程

  鏈接過程。生成可執行代碼。鏈接分爲兩種,一種是靜態鏈接,另外一種是動態鏈接。使用靜態鏈接的好處是,依賴的動態鏈接庫較少,對動態鏈接庫的版本不會很敏感,具有較好的兼容性;缺點是生成的程序比較大。使用動態鏈接的好處是,生成的程序比較小,佔用較少的內存。

  gcc a.o -o a

  程序運行:

  ./a

  hello

      

     GCC的使用

      http://blog.csdn.net/sshhbb/article/details/6705636

五、運行你的第一個linux程序。

        直接命令行處輸入:./程序名 即可運行你linux平臺下的第一個C程序了。

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