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 ...