(資源==》目標代碼)
(2)源代碼==》中間代碼==》目標代碼==》可執行程序
第(1)種壹般的為低級匯編采用的模式,第壹個主要步驟統稱為Assembly(匯編),由“匯編程序”(或稱匯編編譯器)完成,其包含預處理操作,生成的主要文件是目標文件,當然在生成目的文件前還有許多輔助文件,壹般會被“匯編程序”臨時生成,用完即刪除,不指定控制選項的話最終用戶是看不到這些文件的,有哪些中間臨時文件,用處是什麽可以查看“匯編編譯器”的幫助選項得到。第二個主要步驟就是link(鏈接),其將目標代碼文件,鏈接庫裏的目標代碼塊整合為可執行代碼,中間也臨時生成壹些中間文件,如映射文件等,同樣可通過鏈接器的選項查看。
當然,在壹些高級匯編裏還會有資源編譯器,其將各種資源轉為(編譯為)目標文件(作為鏈接器的輸入)
第(2)種壹般是高級語言采用的模式,但有些比較高級的直接跳過中間代碼由源代碼生成目標代碼,其就跟(1)類似,只是此時第壹個主要步驟不叫“匯編”而稱compile(編譯),低級匯編的步驟壹“匯編”也可稱”編譯“。如果有中間代碼生成,這中間代碼就是匯編代碼,此後續處理就同(1)了,此時的中間代碼其實也就是臨時文件中的壹種。
概述:源代碼到目標代碼的過程通常稱為編譯,而目標代碼到可執行程序的過程稱問鏈接。
或將兩個過程統稱為代碼的編譯(全稱應為編譯連接),這涉及具體的語境,事實上編譯器如VC的cl.exe若沒有指定/c(只生產目標代碼選項),其就是編譯連接的統壹過程(cl會調用相應的鏈接器),若指定,則只有編譯過程(只生成目標代碼而不鏈接稱可執行程序)
上述編譯執行類語言開發平臺所開發生成的程序壹般稱為”非托管類程序“
而對於托管類程序(如.NET平臺語言C#,VB.NET,JVM平臺的java等)
其雖然也有編譯過程,但其直接將源代碼轉為中間代碼而不是目標代碼(此時不是匯編代碼更不是機器碼,而是可被.NET或JVM引擎解釋執行的代碼)