GCC常用用法總結

2021-08-09 21:38:59 字數 2709 閱讀 5036

gcc是linux/unix上非常強大的c語言編譯器。並且如今也支援c++的編譯。與vc不同,gcc是完全跨平台的。到目前為止很多任務具都使用gcc作為其編譯環境,比如cocos2d-x,android的ndk等等。 學習使用gcc編譯器,就是學習它眾多的編譯引數。就是用連字元-連線的引數.

因為它的引數並不全是單字元的,所以不能使用乙個連字元後加多個引數的寫法, 要每個引數前面都要加乙個連字元.

直接在gcc後面加上要編譯的c語言原始檔

gcc hello.c

這種預設的情況下會生成乙個名為a.out的可執行檔案。

-o 最常用的編譯選項,用於指定要生成的可執行檔案的名稱。

gcc -o hello hello.c

需要體會的一點是:gcc對於引數的位置無要求!比如也可以寫作

gcc hello.c -o hello

惟一要注意的就是-o後面一定要緊跟要生成的可執行檔名。

-g 用於給生成的可執行檔案加上除錯資訊,只有這樣才可使用gdb除錯。

gcc -g -o hello hello.c

同樣引數-g的也可寫在hello.c後面。

-d選項

參考如下**great.c

#include 

int main(int argc, char *argv)

如果我想要讓程式列印test,測試該分支運**況可以用如下命令:

gcc -dmydebug -g -o great great.c

./great

如果直接

gcc -o great great.c

./great

程式執行結果:

通過使用—d選項可以測試程式分支的正確與否,驗證程式的邏輯正確性.

選項 -e

gcc -e test.c -o test.i 將test.c預處理輸出test.i檔案。

選項 -s

gcc -s test.i 將預處理輸出檔案test.i彙編成test.s檔案。

選項 -c

gcc -c test.s 將彙編輸出檔案test.s編譯輸出test.o檔案。

1.多個檔案一起編譯

用法:gcc a.c b.c c.c d.c -o main

作用:將多個.c檔案編譯後鏈結成可執行檔案 ./main執行

2.單獨編譯各個原始檔,然後對編譯後的.o檔案進行鏈結

gcc -c a.c //生成a.o

gcc -c b.c //生成b.o

gcc -c c.c //生成d.o

gcc -c d.c //生成d.o

例子:

display.c

#include 

void display(const

char *str)

main.c

#include 

extern func();

int main()

關於在main.c中extern func()是告訴編譯器func()宣告在別的檔案,如果不加這一行的話會有如下告警:

main.c:5:5: warning: implicit declaration of function 『display』 [-wimplicit-function-declaration]

使用c99標準編譯 預設的情況下,編譯器是以c89的標準編譯的。使用c99則:

gcc -std=c99 hello.c

-o選項

optimization

-o0

禁止編譯器進行優化。預設為此項。

-o -o1

嘗試優化編譯時間和可執行檔案大小。

-o2

更多的優化,會嘗試幾乎全部的優化功能,但不會進行「空間換時間」的優化方法。

-o3

在 -o2 的基礎上再開啟一些優化選項:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。

-os

對生成檔案大小進行優化。它會開啟 -o2 開的全部選項,除了會那些增加檔案大小的。

共享庫最後要重點說說這個共享庫,在沒有翻apue之前我對共享庫的理解始終停留在理論階段,直到看到apue這本書,感謝當初送這本書給我的同學,雖然我已經忘記是誰畢業送(丟)給我的了!這真的是一本好書!

現在大多數unix系統支援共享庫。共享庫使得可執行檔案中不再需要包含公用的庫函式,而只需在所有程序都可飲用的儲存區中儲存這種庫例程的乙個副本。程式第一次執行或者第一次呼叫某個庫函式時,用動態鏈結方法將程式與共享庫函式相鏈結。這減少了每個可執行檔案的長度,但增加了一些執行時間開銷。這種時間開銷發生在該程式第一次被執行時,或者每個共享庫函式第一次被呼叫時。共享庫的另乙個優點是可以用庫函式的新版本代替老版本而無需對使用該庫的程式重新連線編輯(假設引數的數目和型別都沒有發生改變)。

在不同的系統中,程式可能使用不同的方法說明是否要使用共享庫。比較經典的是cc和gcc命令的選項。作為長度方面發生變化的例子,先用無共享庫方式建立下列**的可執行檔案。可以通過下面的執行過程看出,使用共享庫編譯此程式,可執行檔案的text**段 data資料段 bss未初始化的資料段大小均大幅度減小。

#include 

int main()

C 常用用法總結

華電北風吹 2016 04 04 好久不刷題了,基礎都忘了還是總結一下常用的stl函式用法吧。無創新,純粹為了效率。一 vector用法 vector map n,vector n 二維初始化 struct edge bool compare edge e1,edge e2 vector v sor...

Linux VIM常用用法總結

vim是linux當下最常用的文字處理器,全程為vi improved。它所處理的都是asc 碼字元資料,熟練使用vim對每一位學習linux的人來說都是不可或缺的。首先,vim自帶的幫助文件就可以直接用於搜尋命令及命令的用法,在初次接觸vim的時候肯定會或多或少的用到這一功能。其次,vim分為三種...

vi常用用法總結

0 零 將游標移到當前行的行首 將游標移到當前行的行末 g 將游標移到 g前面的數字指定的行。例如,42g將游標移到檔案的第42行 g 將游標移到檔案的最後一行 w 將游標向前移到下乙個單詞的首字母 e 將游標向前移到下乙個單詞的最後乙個字母 b 將游標向後移到上乙個單詞首字母 將游標定位到上一行的...