Linux C 第七章 GCC編譯器

2021-06-20 13:59:47 字數 1022 閱讀 6339

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.靜態庫 ***.a  建立靜態庫:eg.    ar  rcs  static_lib.a static_lib.o 。 在使用時,後面加上 -l 引數指定靜態庫或者-l引數指定庫檔案搜尋路徑(最好在命令列末尾)。

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

編譯原理 第七章

1 語法樹 語法樹,有向非迴圈圖和字尾式表示源程式的自然層次結構 2 字尾式 中 綴式 a b c b c 字尾式 a b c b c 3 三位址 表示 一般形式 x y op z 4 語法制導翻譯生成三位址 需要用到的量 1 e.place表示存放e值的名字。2 e.code表示對e求值的三位址語...

python第七章 python教程(第七章)

字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...

第七章 觸發器

定義 觸發器是在對錶或檢視進行插入,更新或刪除操作時自動執行的儲存過程 作用及用處 觸發器通常用於強制業務規則 觸發器是一種高階約束,可以定義比用check約束更為複雜的約束 觸發器定義在特定的表或檢視上,與表或檢視相關 自動出發執行 不能直接呼叫 是乙個事物 可回滾 型別 1.after觸發器 只...