回覆列表
  • 1 # 卡時代鯤鵬

    在終端中輸入 gcc 檔名 -o 目標檔名然後 ./目標檔名 就行了,沒有目標檔名,自動存為 a執行 ./a 就行了。在使用Gcc編譯器的時候,我們必須給出一系列必要的呼叫引數和檔名稱。GCC編譯器的呼叫引數大約有100多個,其中多數引數我們可能根本就用不到,這裡只介紹其中最基本、最常用的引數。  GCC最基本的用法是∶gcc [options] [filenames]  其中options就是編譯器所需要的引數,filenames給出相關的檔名稱。  -c,只編譯,不連線成為可執行檔案,編譯器只是由輸入的.c等原始碼檔案生成.o為字尾的目標檔案,通常用於編譯不包含主程式的子程式檔案。  -o output_filename,確定輸出檔案的名稱為output_filename,同時這個名稱不能和原始檔同名。如果不給出這個選項,gcc就給出預設的可執行檔案a.out。  -g,產生符號除錯工具(GNU的gdb)所必要的符號資訊,要想對原始碼進行除錯,我們就必須加入這個選項。  -O,對程式進行最佳化編譯、連線,採用這個選項,整個原始碼會在編譯、連線過程中進行最佳化處理,這樣產生的可執行檔案的執行效率可以提高,但是,編譯、連線的速度就相應地要慢一些。  -O2,比-O更好的最佳化編譯、連線,當然整個編譯、連線過程會更慢。  -Idirname,將dirname所指出的目錄加入到程式標頭檔案目錄列表中,是在預編譯過程中使用的引數。C程式中的標頭檔案包含兩種情況∶  A)#include <myinc.h>  B)#include “myinc.h”  其中,A類使用尖括號(< >),B類使用雙引號(“ ”)。對於A類,預處理程式cpp在系統預設包含檔案目錄(如/usr/include)中搜尋相應的檔案,而B類,預處理程式在目標檔案的資料夾內搜尋相應檔案。 GCC執行過程示例  示例程式碼 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編譯簡單例子  編寫如下程式碼:  #include <stdio.h>  int main()  {  printf("hello,world!\n");  }  執行情況如下:  gcc -E hello.c -o hello.i  gcc -S hello.i -o hello.s  gcc -c hello.s -o hello.o  gcc hello.c -o hello  ./hello  hello,world!

  • 中秋節和大豐收的關聯?
  • 現在還適合創業嗎?現在生意好難做啊,客戶紛紛倒閉,為什麼啊?