1.什麼是gcc
\qquad
gcc是linux中的一款編譯源**的文字編譯器
2.編譯過程
\qquad
比如對hello.c檔案進行編譯,
\qquad
首先,預處理器cpp對hello.c進行處理,cpp會把頭檔案展開,巨集替換,注釋去掉,經過cpp處理後,hello.c檔案變為hello.i檔案;
\qquad
第二步,編譯器gcc對hello.i進行處理,gcc會把c檔案變為彙編檔案,進過gcc處理後,hello.i檔案變為hello.s檔案;
\qquad
第三步,彙編器as對hello.s進行處理,as會把彙編檔案變為二進位制檔案,經過as處理後,hello.s檔案變為hello.o檔案;
\qquad
最後,鏈結器ld對hello.o進行處理,ld會把函式庫相應的**組合到目標檔案中,經過ld處理後,hello.o檔案變為可執行檔案。
\qquad
在整個過程中,第二步最消耗時間。
3.基於linux的編譯處理
\qquad
linux中使用gcc命令對filename.c檔案進行處理。
\qquad
從filename.c到filename.i
gcc -e filename.c -o filename.i
\qquad
從filename.i到filename.s
gcc -s filename.i -o filename.s
\qquad
從filename.s到filename.o
gcc -c filename.s -o filename.o
\qquad
從filename.o到可執行檔案
\qquad
從filename.c直接到可執行檔案
\qquad
4.gcc的引數
\qquad
在進行編譯時,原始檔和標頭檔案應該放在乙個目錄下,否則需要制定標頭檔案的路徑。
注意:filename.c位置應該包含所有.c檔案,否則會編譯失敗,
並且如果.c檔案不再同乙個資料夾下,應該採取路徑方式,將所有.c檔案都包含進來
-i鏈結了標頭檔案的位置,如果有多個標頭檔案在不同位置,那麼就需要每個標頭檔案都需要乙個-i。
\qquad
在進行編譯時,定義乙個巨集
\qquad
在進行編譯時,對程式進行優化,優化等級分為o1,o2,o3
\qquad
在進行編譯時,輸出警告資訊
5.gcc例項演示
目錄結構
zhaoxr@zhaoxr-thinkpad-e450:
~/linux$ tree
.├── head
│ ├── add.h
│ └── mul.h
└── source
├── add.c
├── main.c
└── mul.c
2 directories,
5 files
gcc編譯生成可執行檔案
zhaoxr@zhaoxr-thinkpad-e450:
~/linux$ tree
.├── head
│ ├── add.h
│ └── mul.h
└── source
├── add.c
├── main.c
└── mul.c
2 directories,
6 files
執行
zhaoxr@zhaoxr-thinkpad-e450:
~/linux$ .
a+b=
19,a*b=
90
常用的gcc命令
gcc命令用於生成c語言的庫 g 用於生成c 的庫 使用g help檢視幫助 g class first.cpp static g o first 編譯 first.cpp 生產乙個 名字為first.exe的檔案 生成.o檔案 g o0 g3 wall c fmessage length 0 of...
GCC的原子操作
gcc從4.1.2提供了 sync 系列的built in函式,用於提供加減和邏輯運算的原子操作。其宣告如下 type sync fetch and add type ptr,type value,type sync fetch and sub type ptr,type value,type sy...
gcc的原子操作
提供加減和邏輯運算的原子操作 type sync fetch and add type ptr,type value,type sync fetch and sub type ptr,type value,type sync fetch and or type ptr,type value,type...