當前位置:編程學習大全網 - 源碼下載 - 在linux中,怎麽用gcc編譯文件

在linux中,怎麽用gcc編譯文件

在終端中輸入 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!

  • 上一篇:Winform經典項目源代碼
  • 下一篇:江西省生態文明建設辦公室
  • copyright 2024編程學習大全網