Linux GCC 編譯原始檔

2021-07-07 03:24:41 字數 2034 閱讀 4118

一. 常用編譯命令選項

假設源程式檔名為test.c。

1. 無選項編譯鏈結

用法:#gcc test.c

2. 選項 -o

用法:#gcc test.c -o test

3. 選項 -e

用法:#gcc -e test.c -o test.i

作用:將test.c預處理輸出test.i檔案。

4. 選項 -s

用法:#gcc -s test.i 

作用:將預處理輸出檔案test.i彙編成test.s檔案。

5. 選項 -c

用法:#gcc -c test.s

作用:將彙編輸出檔案test.s編譯輸出test.o檔案。

6. 無選項鏈結

用法:#gcc test.o -o test

7. 選項-o

用法:#gcc -o1 test.c -o test

作用:使用編譯優化級別1編譯程式。級別為1~3,級別越大優化效果越好,但編譯時間越長。

二. 多原始檔的編譯方法

如果有多個原始檔,基本上有兩種編譯方法:

[假設有兩個原始檔為test.c和testfun.c]

1. 多個檔案一起編譯

用法:#gcc testfun.c test.c -o test

2. 分別編譯各個原始檔,之後對編譯後輸出的目標檔案鏈結。

用法:#gcc -c testfun.c //將testfun.c編譯成testfun.o

#gcc -c test.c //將test.c編譯成test.o

#gcc -o testfun.o test.o -o test //將testfun.o和test.o鏈結成test

以上兩種方法相比較,第一中方法編譯時需要所有檔案重新編譯,而第二種方法可以只重新編譯修改的檔案,未修改的檔案不用重新編譯。

3. 如果要編譯的檔案都在同乙個目錄下,可以用萬用字元gcc *.c -o 來進行編譯。

你是否會問,如果是乙個專案的話,可能會有上百個檔案,這樣的編譯法,人不是要累死在電腦前嗎,或者等到你編譯成功了,豈不是頭髮都白了,呵呵,所以我們要把上述的編譯過程寫進以下乙個文字檔案中:

linux下稱之為makefile

#這裡可以寫一些檔案的說明

myfirst: myfirst.o hello.o

g++ myfirst.o hello.o -o myfirst

hello.o:hello.cpp

g++ -c hello.cpp -o hello.o

myfirst.o:myfirst.cpp

g++ -c myfirst.cpp -o myfirst.o

makefile 編寫規則:

(1)以「#」開始的行為注釋

(2)檔案依賴關係為:

target:components

rule

存檔為myfirst,在終端輸入:make myfist ,程式出現了錯誤可是所有程式設計師共同的敵人,在編寫程式時我們應該盡量的去避免錯誤的出現,不過編寫的時候再怎麼都不可避免的出現這樣那樣的錯誤,對程式 進行必要的除錯是乙個好主意,那我們怎麼來除錯程式呢,看下面:

gdb ./檔名 在這裡我修改下要想下面可以除錯,在上面編譯的 時候必須加上引數g,g++ -g hello.cpp -o hello

以下為除錯狀態下的可以用到的命令(可以僅輸入單詞的輸入,如break可簡為b),尖括號中為說明

list 《顯示源**》

break 行號 《設定斷點》

run 《執行程式》

continue 《繼續從斷點處執行》

print 變數 《除錯時檢視變數的值》

del 行號 《刪除斷點》

step 《單步執行,可跟蹤到函式內部》

next 《單步執行,不可跟蹤到函式內部》

quit 《退出》

makefile 的編寫不是件容易的事情,因為自己寫的makefile可能不能在所有的unix/linux類作業系統下通用。因此在很多專案中都用automake.autoconf或者是cmake等工具。

linux gcc編譯引數

gcc 編譯 hello.c hello.i 預處理階段,生成中間檔案 hello.s 彙編階段,生成彙編檔案 hello.o 編譯階段,生成二進位制 檔案 hello 鏈結階段,生成可執行程式 預處理階段,主要是將巨集定義替換,條件編譯 標頭檔案包含,可以cat hello.i檔案檢視 gcc e...

linux gcc編譯選項

1 安全編譯選項 作業系統提供了許多安全機制來嘗試降低或阻止緩衝區溢位攻擊帶來的安全風險,包括dep aslr等。在使用gcc進行編譯時,可以使用gcc的編譯選項來避免堆疊溢位 整數溢位等問題。2 checksec.sh 3 aslr 位址隨機化 aslr address space layout ...

gcc 編譯多個原始檔

一.常用編譯命令選項 假設源程式檔名為test.c。3.選項 e 用法 gcc e test.c o test.i 作用 將test.c預處理輸出test.i檔案。4.選項 s 用法 gcc s test.i 作用 將預處理輸出檔案test.i彙編成test.s檔案。5.選項 c 用法 gcc c ...