編譯到底是在幹什麼

2021-10-08 18:57:32 字數 1177 閱讀 2556

寫c++都知道,寫完程式要編譯才能形成可執行檔案,那麼,編譯到底是在幹一件什麼樣的事呢?

編譯的例子

寫乙個簡單的helloworld.cpp程式

#include

using

namespace std;

intmain()

然後執行g++進行編譯並執行:

[root@vm-238-167-centos /]

# g++ -o helloworld helloworld.cpp

[root@vm-238-167-centos /]

# ./helloworld

hello world!

實際上,執行g++ -o這個命令,是進行了非常多的步驟的,包括預處理、編譯、彙編、鏈結

編譯與鏈結

預處理預處理過程主要是處理那些以#開頭的預編譯指令,包括#include或者#define

可以執行g++ -e生成預處理後的檔案,字尾為-i

g++ -e  helloworld.cpp -o helloworld.i
檢視生成的-i就可以知道將標頭檔案等進行了預編譯展開

主要過程如下:

故如果想檢視對應的巨集編譯是否正確展開時,可以檢視預編譯後的檔案

編譯與彙編

編譯的過程是進行詞法分析、語法分析、語義分析以及優化後產生相應的彙編**檔案。

g++ -s helloworld.i -o helloworld.s
執行後檢視該檔案可以知道已經產生了對應的彙編檔案:

整個編譯過程,就是將高階語言翻譯為機器語言的過程:通常將其分為6步,包括掃瞄、詞法分析、語義分析、源**優化、**生成、目標**優化。

編譯完成後生成了彙編**,然後編譯器將彙編**轉化為機器碼,即產生二進位制檔案鏈結

攝像機標定到底是在幹什麼?

2017年11月13日學習記錄 機器視覺 1 攝像機標定概括 剛開始學機器視覺,我研究的方向主要是雙目視覺測距。做機器視覺的肯定對攝像機標定並不陌生。我入坑乙個月,開始就是看看書 了解了大概流程和研究主要方法,無特別明確目的和壓力。然後發現沒什麼進展,不能再這樣了,得動手做。就開始動手做標定,才發現...

攝像機標定到底是在幹什麼?

2017年11月13日學習記錄 機器視覺 1 攝像機標定概括 剛開始學機器視覺,我研究的方向主要是雙目視覺測距。做機器視覺的肯定對攝像機標定並不陌生。我入坑乙個月,開始就是看看書 了解了大概流程和研究主要方法,無特別明確目的和壓力。然後發現沒什麼進展,不能再這樣了,得動手做。就開始動手做標定,才發現...

XML到底是幹什麼的

xml本身是一種格式規範,是一種包含了資料以及資料說明的文字格式規範。比如,我們要給對方傳輸一段資料,資料內容是 too young,too sometimes 要將這段話按照屬性拆分為三個資料的話,就是,年齡too young,閱歷too 結果sometimes 我們都知道程式不像人,可以體會字面...