乙個程式是如何生成的

2021-10-09 08:03:46 字數 766 閱讀 2454

很多剛接觸程式設計的同學,應該都會學到乙個「hello world」的程式,通常教程中都會教先安裝乙個idea,然後在idea中敲入**,編譯然後執行,簡單的「hello world」程式就完成了。但你是否有想過從敲完**後的原始檔,到輸出「hello world」的可執行檔案,這中間到底經歷了什麼過程呢?下面由我根據最近學到的知識,講解一下這中間經歷的過程吧。

預處理——將原始檔當中的預處理指令替換為對應的內容。

gcc -e 原始檔

編譯——將預處理後的檔案轉換成對應的彙編檔案,此時會生成乙個.s結尾的彙編檔案。

gcc -s 原始檔或前一步生成的彙編檔案

彙編——將彙編檔案轉換為目標檔案(二進位製碼檔案),此時會生成乙個.o結尾的目標檔案。

gcc -c 原始檔或前一步生成的彙編檔案

鏈結——將前一步生成的目標檔案和系統的庫(靜態庫或動態庫)檔案,合併生成為可執行檔案。

gcc 原始檔或前一步生成的多個目標檔案

執行——目錄下的可執行檔案的方式,一般如果是當前目錄下,需要加./,否則會將其當做系統指令執行。

./a.out

編譯期出的錯誤,一般為c語言語法性的錯誤。

鏈結期的錯誤,一般為找不到實際呼叫的錯誤。

執行期的錯誤,分兩種:

(1)會導致程式崩潰的錯誤,一般是由於不符合系統處理的錯誤,一般是由於不符合系統處理的錯誤。

(2)資料型別錯誤。

乙個C程式是如何生成的

c程式設計的基本策略是用程式把源 檔案轉換成可執行檔案。c通過編譯和鏈結這兩個步驟來完成這一過程。編譯器把源 轉換成中間 鏈結器把中間 和其他 包括預編譯的庫 合併,生成可執行檔案。中間 有很多種形式,最普遍的就是把源 轉換為機器語言 並把結果放在目標 檔案裡。但是目標檔案缺失許多 1是啟動 啟動 ...

自己是實現的乙個生成子集程式

1 include iostream 2using namespace std 34 const intmax 4 5inta max 6int b max 7 把十進位制轉化為二進位制 8void test ints 18for intj 0 j max j 19cout a j 20cout e...

windows 上乙個 exe程式是如何執行的

1 shell explorer.exe 呼叫createprocess 函式啟用exe 程式 2 系統建立乙個程序核心物件,引用計數置為1 3 系統為程序建立乙個4gb 的程序虛擬位址空間 的動態鏈結庫 dlls 5 系統為程序建立乙個主線程,執行緒得到cpu 後,把cs ip 指向.text 節...