1. 程式人生 > >Linux C 編譯流程(GCC)

Linux C 編譯流程(GCC)

1 開發環境、工具

    通常所說的GCC是GUN Compiler Collection的簡稱,是Linux系統上常用的編譯工具;GCC工具鏈軟體包括GCC、Binutils、C執行庫等
 

1.1 GCC

    GCC(GNU C Compiler)是編譯工具;將 C/C++語言 編寫的程式轉換成為處理器能夠執行的二進位制程式碼的過程 即由編譯器完成
 

1.2 Binutils

    一組二進位制程式處理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。這一組工具是開發和除錯不可缺少的工具

工具 說明
addr2line 用來將程式地址轉換成其所對應的程式原始檔及所對應的程式碼行,也可以得到所對應的函式。該工具將幫助偵錯程式在除錯的過程中定位對應的原始碼位置
as 主要用於彙編
ld 主要用於連結
ar 主要用於建立靜態庫
ldd 可以用於檢視一個可執行程式依賴的共享庫
objcopy 將一種物件檔案翻譯成另一種格式,譬如將.bin轉換成.elf、或者將.elf轉換成.bin等
objdump 主要的作用是反彙編
readelf 顯示有關ELF檔案的資訊
size 列出可執行檔案每個部分的尺寸和總尺寸,程式碼段、資料段、總大小等,請參見後文瞭解使用size的具體使用例項

 

1.3 C執行庫

    C語言標準主要由兩部分組成:一部分描述C的語法,另一部分描述C標準庫。C標準庫定義了一組標準標頭檔案,每個標頭檔案中包含一些相關的函式、變數、型別宣告和巨集定義,譬如常見的printf函式便是一個C標準庫函式,其原型定義在stdio標頭檔案中。
    C語言標準僅僅定義了C標準庫函式原型,並沒有提供實現。因此,C語言編譯器通常需要一個C執行時庫(C Run Time Libray,CRT)的支援。C執行時庫又常簡稱為C執行庫。與C語言類似,C++也定義了自己的標準,同時提供相關支援庫,稱為C++執行時庫
 

2、建立 C檔案

    編輯的過程就是建立和修改 C 程式的原始碼;其實在 Linux 上,最常用的文字編輯器是 Vim 編輯器,也可以採用 gedit 編輯器

3、編譯

3.1 編譯步驟

    C 程式的建立過程有五個基本步驟

步驟 命令 說明
編輯 vim {file_name} 編輯期間產生的檔案,常稱為原始檔
預處理 gcc -E {file_name}.o -o {file_name}.i 生成 編譯檔案
編譯 gcc -S {file_name}.o -o {file_name}.s 生成彙編檔案
彙編 gcc -c {file_name}.o -o {file_name}.o 在 Linux 中這些檔案的副檔名通常是 .o,在 Windows 下面這些檔案的副檔名通常是 .obj 。如果編譯成功就會生成一個檔案,它與原始檔同名。但副檔名為 .o 或者 .obj
連結 gcc -g -v -Wall {file_name}.o -o {file_name} 連結器將原始碼檔案中由編譯器產生的各種物件模組組合起來,再從 C 語言提供的程式庫中新增必要的程式碼模組,將它們組合成一個可執行檔案;連結一旦成功,就會生成可執行檔案,在 Windows 下面可執行檔案的副檔名是 .exe,在 Linux 下面,可執行檔案沒有副檔名,但它的檔案型別是可執行的