導航:首頁 > 源碼編譯 > add編譯原理

add編譯原理

發布時間:2025-02-16 00:30:20

① 「基礎知識」gcc/g++編譯過程及gcc/g++與cmake對應關系

2022年,直接使用gcc/g++編譯項目的可能性已經不多見,學習c/c++的程序員常選擇cmake,但對gcc/g++編譯過程的了解對高效掌握cmake至關重要。本文將逐步揭示gcc/g++的編譯流程及其與cmake的關系。


首先,gcc/g++編譯過程分為四個步驟:



  1. 預處理:處理#include和宏定義,g++使用-E選項生成預處理後的.i文件。

  2. 編譯:將預處理文件轉化為匯編代碼,g++用-S命令生成.s文件。

  3. 匯編:將匯編語言轉換成機器碼,g++用-c命令生成.o目標文件。

  4. 鏈接:將目標文件與其他庫合並為可執行文件,g++在最終步驟完成。


接著,了解gcc/g++的一些常用參數,如-I用於自定義頭文件搜索路徑,以及處理靜態庫和動態庫的鏈接。


靜態庫和動態庫的區別在於,靜態庫在編譯時被直接嵌入,而動態庫在運行時動態載入。使用g++時,需要-I和-l/L參數進行相應操作。


在cmake中,項目結構有所不同。CMakeLists.txt文件用於指導編譯,如設置頭文件搜索目錄、生成可執行文件和鏈接庫。靜態庫和動態庫的創建與鏈接在cmake中通過add_library和target_link_libraries指令實現。


總的來說,了解gcc/g++的編譯過程有助於更好地掌握cmake,即使使用cmake,對底層編譯原理的理解仍能提高效率。從基礎的helloworld項目開始,一步步實踐編譯操作,對編譯流程的掌握將使cmake學習更加得心應手。

② 編譯原理簡單嗎

編譯原理主要是講了編譯器的實現。
那什麼是編譯器呢?
編譯器就是將 源程序→編譯器 →目標機器代碼的程序
本文將用一段最簡單的代碼進行說明

1 + 2 + 3

第一步. 詞法分析
當代碼從文件中被讀入到編輯器時,將會進行詞法分析
示例中的代碼最終會轉換為(下面為偽代碼)

1 ADD 2 ADD 3

第二步. 語法分析
這一步編譯器將會把詞法分析的結果轉換成AST(abstract syntax tree, 抽象語法樹)
所有的操作數將會作為子節點,所有的操作符將會作為父節點。(不知道的同學可以看一下樹的生成)

1 + 2 + 3 對應的樹
3. 生成目標代碼
對上面的樹進行後序遍歷,將會得到下面的偽代碼

((1 2 +) 3 +)

生成的匯編偽代碼為

START:

MOV VALUE, 0//初始化結果為0

ADD VALUE, 1

ADD VALUE, 2//(1 2 +)的匯編偽代碼

ADD VALUE, 3

RET VALUE

END

最終匯編代碼會被編譯成機器代碼,在計算機上執行。
下面為一般情況下的編譯流程
1. 詞法分析(生成代碼對應的token序列,使用正則表達式)
2. 語法分析(生成AST)
3. 語義分析(對代碼的語法進行檢查)
4. 代碼生成(生成可執行的代碼)

閱讀全文

與add編譯原理相關的資料

熱點內容
魅族最強程序員 瀏覽:987
java賦值null 瀏覽:54
數控程序員考試 瀏覽:260
單片機0x 瀏覽:451
dhsp伺服器是什麼 瀏覽:690
網路監測命令 瀏覽:206
redis隊列java 瀏覽:221
php商城項目思路 瀏覽:461
反編譯程序集能修改嗎 瀏覽:1002
小盒課堂app哪個好用 瀏覽:535
pdf剪裁工具 瀏覽:43
多人協同伺服器地址 瀏覽:665
wifi恢復出廠設置怎麼加密 瀏覽:337
手機date文件夾無法訪問 瀏覽:90
19款速騰安卓主機如何與手機互聯 瀏覽:776
網易我的世界電腦版伺服器地址 瀏覽:78
v語言編譯器解析 瀏覽:181
linux收不到組播 瀏覽:13
程序員那麼可愛電視劇在線看 瀏覽:624
r語言圖例函數命令 瀏覽:445