gcc編譯器使用簡明指南

2021-05-27 07:59:45 字數 2849 閱讀 5008

gcc編譯器使用簡明指南

file.c

c程式原始檔

file.i 

c程式預處理後檔案

file.cxx

c++程式原始檔,也可以是file.cc / file.cpp / file.c++

file.ii 

c++程式預處理後檔案

file.h 

c/c++標頭檔案

file.s

匯程式設計序檔案

file.o 

目標**檔案

gcc [選項] 檔案列表

-ansi

強制完全ansi一致

-c僅編譯或彙編,生成目標**檔案,將.c、.i、.s等檔案生成.o檔案,其餘檔案被忽略

-s僅編譯,不進行彙編和鏈結,將.c、.i等檔案生成.s檔案,其餘檔案被忽略

-e僅預處理,並傳送預處理後的.i檔案到標準輸出,其餘檔案被忽略

-o file

建立可執行檔案並儲存在file中,而不是預設檔案a.out

-g產生用於除錯和排錯的擴充套件符號表,用於gdb除錯,切記-g和-o通常不能一起使用

-w取消所有警告

-w給出更詳細的警告

-o [num]

優化,可以指定0-3作為優化級別,級別0表示沒有優化

-x language

預設為-x none,即依靠字尾名確定檔案型別,加上-x lan確定後面所有檔案型別,直到下乙個-x出現為止

-d macro[=]

類似於源程式裡的#define,在-d macro中的macro可被源程式識別,例如gcc -d num -d file=\"bbs.txt\" hello.c -o hello,第乙個-d選項定義巨集num,在程式中可以使用#ifdef來檢查是否被設定,第二個-d定義巨集file,在源程式中可用

-u macro

類似於源程式開頭定義#undef macro,也就是取消源程式中的某個巨集定義

-i dir

將dir目錄加到搜尋標頭檔案的目錄中去,並優先於gcc中預設的搜尋目錄,有多個-i選項時,按照出現順序搜尋

-l dir 

將dir目錄加到搜尋-lname選項指定的函式庫檔案的目錄列表中去,並優先於gcc預設的搜尋目錄,有多個-l選項時,按照出現順序搜尋

-lname

在鏈結時使用函式庫libname.a,鏈結程式在-l dir指定的目錄和/lib、/usr/lib目錄下尋找該庫檔案,在沒有使用-static選項時,如果發現共享函式庫libname.so,則使用libname.so進行動態鏈結

-fpic

產生位置無關的目標**,可用於構造共享函式庫

-static

禁止與共享函式庫鏈結

1.編譯單個檔案

vi hello.c               //建立原始檔hello.c

gcc -o hello hello.c  //編譯為可執行檔案hello,在預設情況下產生的可執行檔名為a.out

./hello                  //執行檔案,如果只寫hello是錯誤的,因為系統會將hello當指令來執行,然後報錯

2.編譯多個原始檔

vi message.c

gcc -c message.c         //輸出message.o檔案,是乙個已編譯的目標**檔案

vi main.c

gcc -c main.c            //輸出main.o檔案

gcc -o all main.o message.o    //執行連線階段的工作,然後生成all可執行檔案

./all

注意:gcc對如何將多個原始檔編譯成乙個可執行檔案有內建的規則,所以前面的多個單獨步驟可以簡化為乙個命令。

vi message.c

vi main.c

gcc -o all message.c main.c

./all

3.使用外部函式庫

gcc常常與包含標準例程的外部軟體庫結合使用,幾乎每乙個linux應用程式都依賴於gnu c函式庫glibc。

vi trig.c

gcc -o trig -lm trig.c

gcc的-lm選項,告訴gcc檢視系統提供的數學庫libm。函式庫一般會位於目錄/lib或者/usr/lib中。

4.共享函式庫和靜態函式庫

靜態函式庫:每次當應用程式和靜態連線的函式庫一起編譯時,任何引用的庫函式的**都會被直接包含進最終二進位制程式。

共享函式庫:包含每個庫函式的單一全域性版本,它在所有應用程式之間共享。

vi message.c

vi hello.c

gcc -c hello.c

gcc -fpic -c message.c

gcc -shared -o libmessge.so message.o

其中,pic命令列標記告訴gcc產生的**不要包含對函式和變數具體記憶體位置的引用,這是因為現在還無法知道使用該訊息**的應用程式會將它鏈結到哪一段位址空間。這樣編譯輸出的檔案message.o可以被用於建立共享函式庫。-shared標記將某目標**檔案變換成共享函式庫檔案。

gcc -o all -lmessage -l. hello.o

-lmessage標記來告訴gcc在連線階段使用共享資料庫libmessage.so,-l.標記告訴gcc函式庫可能在當前目錄中,首先查詢當前目錄,否則gcc聯結器只會查詢系統函式庫目錄,在本例情況下,就找不到可用的函式庫了。

gcc編譯器使用 Makefile檔案內容編輯

gcc 編譯器的使用 1.連續使用3條命令 gcc e test.c o test.i 編譯生成中間檔案 gcc s test.s o test o 二進位制機器碼 gcc test.o o test 可執行程式 2.連續使用兩條命令 gcc c test.c o test.o gcc test o...

編譯器使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

Linux gcc g 編譯器使用

1.首先應會設定幾個好用的環境變數 cplus include path cplus include path home test include 此環境變數用來設定標頭檔案包含路徑,這樣就不用編譯的時候新增路徑咯 ld library path ld library path home test ...