Linux C 編譯流程(GCC)
阿新 • • 發佈:2018-11-05
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 下面,可執行檔案沒有副檔名,但它的檔案型別是可執行的 |