【Linux C】第七章 GCC編譯器

1. Gcc編譯流程:源文件預處理生成.i文件--->.i文件編譯爲彙編語言生成.s文件----->彙編語言文件經過彙編生成目標文件.o文件------->將各模塊目標文件連接生成可執行文件。

2. gcc常用選項

-c 進行預處理、編譯、彙編生成.o文件但不進行連接。

-S進行預處理、編譯生成彙編文件但不進行彙編。

-E進行預處理、但是不進行彙編。

-o完整進行四步,生成可執行文件。

-I 指定include包含文件的搜索目錄。

-g 生成調試信息,用於GDB等調試器調試。

3. 目標文件:可重定位目標文件、可執行目標文件、共享目標文件(.so文件,運行時動態加載)。

4. ELF是linux下最常用的目標文件格式。包括兩個組成部分:ELF文件頭和目標文件段。ELF文件頭包括生成該文件系統的字長及字節序,ELF文件頭大小,目標文件類型,目標機的類型。

5. ELF目標文件的段包括:

.txt 代碼段,存儲二進制機器碼。

.rodata 只讀數據段,存儲複雜常量如字符串。

.data 數據段,存儲全局變量和靜態變量。

.bss 塊存儲段,存儲未被明確初始化的全局數據。表示加載到內存中時需要預留的空間,但不佔用實際的空間。提高磁盤的存儲空間利用率。

以上四個段在程序運行時,會被實際加載到內存中。以下爲輔助程序進行鏈接和加載的信息。

.symtab:符號表。 .rel.text:代碼段重定位信息(如函數名和標號)。.re.data:數據段需要重定位信息。 .debug:調試信息。 .line:源程序行號映射。 .strtab:字符串表。

6. 程序庫包含了一些通用的函數及可執行碼的文件。包括靜態庫(運行前加入執行碼)和動態庫(程序啓動時加入,可多執行程序共享)。

7. 靜態庫 xxx.a  創建靜態庫:eg.    ar  rcs  static_lib.a static_lib.o 。 在使用時,後面加上 -l 參數指定靜態庫或者-L參數指定庫文件搜索路徑(最好在命令行末尾)。

8. gcc工具鏈包括ar、as、id、nm、size等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章