Delphi編譯 鏈結過程

2022-02-02 14:34:32 字數 1882 閱讀 9156

下面展示了delphi是怎樣編譯原始檔,並且把它們鏈結起來,最終形成可執行檔案。

首先,object pascal編譯器把專案單元編譯為二進位制物件檔案,然後資源編輯器將把諸如程式圖示、窗體檔案等資源編譯成二進位制資源檔案,接著鏈結開始起作用;鏈結器根據編譯器產生的二進位制檔案,依專案需要增加一些庫檔案,並把這些檔案綜合在一起產生最終的可執行檔案。

編譯、建立和鏈結

每當點選run按鈕時,delphi都會編譯和鏈結程式,但它只編譯改動過的單元。delphi能知道哪個個檔案已改動,哪個檔案沒有改到。

絕大部分時間中,我們都想看一看改變後的程式執行結果,在這種情況下,就需要點選run按鈕,程式將被編譯、鏈結和執行。但有時候可能不想執行程式,比如只想編譯程式,看一看有沒有什麼錯誤。

1、syntax check project1 選項,它能讓delphi編譯工程,並且報出任何錯誤和警告,這時檢查**錯誤最快的方法,delphi只編譯工程,而不執行鏈結,syntax check選項的目的就是盡快檢查**的語法錯誤,因為鏈結階段需要佔額外的時間,syntax check忽略了這一步。介面如下:

2、compile project1 選項,就像syntax check一樣,它用來編譯從最近一次編譯後改動過的任何單元。它需要執行鏈結,因此比syntax check 選項所佔的時間稍長一點,當需要只編譯和鏈結程式而不執行時就可以用compile 選項。介面如下:

預設情況下,該compile選項不會顯示編譯狀態對話方塊,通過主選單【tools | environment option】對話方塊中開啟「preferences」選項卡,在compiling and running組合框中勾選「show compiler progress」選項即可開啟編譯狀態對話方塊,如下:

delphi編譯工程的速度非常快,故一般不需要編譯狀態對話方塊,實際上,編譯狀態對話方塊增加了編譯時間,因為編譯狀態對話方塊中顯示資訊是占用時間的。

3、build project1 選項,佔的時間最長,這個選項編譯工程中的每乙個單元,不管這個單元是否有改動,當編譯完所有單元後,delphi鏈結整個工程,並生成project1.exe可執行檔案。

不管選擇哪種方式編譯工程,如果發現了錯誤,code editor 將會出現在頂級視窗,並且code editor 底部的資訊視窗將會顯示錯誤和警告清單。code editor 會把第一處出錯的**行加亮,當成功進行語法檢查、編譯、鏈結和建立後,就可以通過選擇run按鈕來執行程式。

編譯並建立其他delphi程式

在delphi中,大部分情況都是編寫基於vcl的應用程式。但有時也要編寫其他型別的應用程式。點選主選單【file | new | other..】可以看到delphi支援的其他型別應用程式,如下:

dll wizard,將建立動態鏈結庫(dll)

編譯鏈結過程

在談編譯鏈結過程之前我們需要了解一下虛擬位址空間以及程式在編譯鏈結過程時經過了什麼步驟。虛擬位址空間之前在程序空間的部落格中詳細介紹過了,詳見 上圖就是32位系統中4g虛擬位址空間的分布情況 text 段 指令段,存放的是指令 在程式中,我們把區域性變數定義 區域性變數的 定義是指令而不是資料 還有...

編譯鏈結過程(一)

什麼是編譯?什麼是鏈結?為什麼需要編譯和鏈結?在很久以前,計算機發展的初期,還在用機器語言編寫程式,量比較少時是不需要編譯和鏈結的。因為當時的程式設計師直接編寫機器碼讓計算機執行。每種cpu的指令是不相同的,所以每乙個程式要換一台不同cpu的機器上執行時,需要重新寫程式,而且機器語言 涉及很多計算機...

編譯鏈結過程(二)

前一篇博文提到編譯的幾個步驟,這一篇來了解下具體每一步都幹了些什麼,好叫心裡有數。詳細的過程,我想只有通過分析乙個具體的編譯器 才好。下面介紹的幾個步驟完成了原始碼檔案經過編譯鏈結後成為可執行檔案 預編譯後的檔案,不再包含注釋,標頭檔案也插入進來,條件編譯也得到相應的處理。那麼,剩下的就是實實在在的...