面試題學習筆記11 linux的編譯過程

2021-10-07 15:29:39 字數 799 閱讀 7592

使用gcc編譯程式時,編譯工程分為4個階段:預處理,編譯,彙編,鏈結。

程式設計師可以根據自己的需要讓gcc在編譯的任意階段結束,以便於檢查或使用編譯器在該階段輸出資訊,或者對最後生成的二級制檔案進行控制,可以加入不同數量和種類的除錯**來為除錯做準備。

在功能上,預處理編譯彙編是三個不同的階段,但在gcc實際操作中合併為乙個步驟進行。

將所有的#define刪除,展開所有的巨集定義,處理所有的條件預編譯指令,如#if #ifdef #elif #else等。

處理#include預編譯指令,將被包含的檔案插入到該預編譯指令的位置。

刪除所有的注釋

新增行號和檔案標識

保留所有的#program編譯器指令,後續編譯過程需要使用。

預處理指令:

$gcc -e ***.c -o ***.i //將原始檔預處理生成***.i

編譯過程就是對預處理完的檔案進行一系列的詞法分析,語法分析,語義分析以及優化後生成相應的彙編**。

編譯指令:

$gcc -s ***.i -o ***.s //將原始檔編譯成***.s

彙編過程呼叫彙編**進行處理,生成處理器能識別的指令,儲存在.o檔案中。每一條彙編語句幾乎都對應一條處理器指令,因此彙編相對於編譯過程比較簡單。

當程式由多個源**檔案構成時,每個檔案都要先完成彙編工作,生成.o檔案後,才能進入下一步的鏈結工作。

彙編指令:

$gcc -c ***.s -o ***.o//將編譯生成的.s檔案匯編生成.o檔案

ndk學習11 linux記憶體管理

1.程序位址空間 2.記憶體管理 棧上分配空間 alloca 棧上分配大小 strdupa 拷貝乙個字串到棧上 顯然這個函式不安全 挖漏洞的可以全域性的原始碼審計下這個函式了 strndupa 拷貝指定長度的內容到棧上 儲存器操作函式 memset bzero memmove bcopy memcp...

Linux筆記 11(Linux 檔案系統簡介)

linux筆記 11 標籤 空格分隔 linux 1.檔案系統特性 索引式檔案系統 inode 記錄檔案的屬性,乙個檔案占用乙個 inode 同時記錄此檔案的資料所在的 block 號碼 block 實際記錄檔案的內容,若檔案太大時,會占用多個 block 2.linux的 ext2 檔案系統 in...

前端面試題學習筆記

html頁面進行重繪和重排 回流 瀏覽器的執行機制 構建dom樹 parse 渲染引擎解析html文件,首先將標籤轉換成dom樹中的dom node 包括js生成的標籤 生成內容樹 content tree dom tree 構建渲染樹 construct 解析對應的css樣式檔案資訊。包括js生成...