寫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 我們都知道程式不像人,可以體會字面...