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
gcc編譯鏈結多檔案
方法一直接編譯 gcc file1.c file2.c file3.c main.c o out 前提是main.c要include其他檔案的標頭檔案,來避免main檔案中沒有宣告就使用沒定義的函式導致的報錯,如果要寫的挫點,也可以不include標頭檔案,而在main檔案裡手寫那幾個宣告。方法二把...
gcc 編譯 鏈結原理
使用 ld linux.so.作為直譯器,是寫在二進位制檔案中的,比如上面編譯好的 demo 中。另外的,2 其它庫的查詢和載入,則是 ld linux.so.完成的。ldd 可執行檔名 檢視可執行檔案鏈結了哪些 系統動態鏈結庫 strip 可執行檔名 去除符號表可以給可執行檔案 ldconfig ...
gcc 多原始檔的編譯方法
如果有多個原始檔,基本上有兩種編譯方法 假設有兩個原始檔為test.c和testfun.c 1.多個檔案一起編譯 用法 gcc testfun.c test.c o test 作用 將testfun.c和test.c分別編譯後鏈結成test可執行檔案。2.分別編譯各個原始檔,之後對編譯後輸出的目標檔...