一個程序裡面有很多頭文件h和源文件cpp,
然後程序運行時候必須從main函數開始運行,
但是編譯時候編譯器是怎麼找到main函數呢,
編譯器怎麼知道main函數在哪個文件裡呢
每個 obj,lib ,文件裡面 都有各種符號信息,特別是重定位表。
如果一個文件沒有定義 main
那麼他的表裡要麼指出需要一個main
要麼沒有任何main函數的信息。
實際上,系統庫的某個部分。需要調用 main函數,
所以它會指出這是個外部函數,不在本模塊定義,
需要有一個模塊定義了它
而你的程序中的某個cpp定義了main
編譯後,這個模塊的表裡會告訴連接器,這裡定義了main 這個函數。
連接器,會匯總所有模塊的信息,找到定義main的模塊。
從而鏈接上main這個函數,用main的地址替代
call _main 指令生成的二進制代碼的地址部分,完成鏈接。