1摸袁、靜態(tài)編譯:
靜態(tài)編譯就是編譯器在編譯可執(zhí)行文件時钥顽,將可執(zhí)行文件需要調(diào)用的部分從對于動態(tài)庫中提取出來,鏈接到可執(zhí)行文件中去靠汁,使可執(zhí)行文件在運行時不依賴與動態(tài)鏈接庫蜂大。
2、動態(tài)編譯
動態(tài)編譯的可執(zhí)行文件需要附帶一個動態(tài)鏈接庫蝶怔。在執(zhí)行時奶浦,需要調(diào)用其動態(tài)鏈接庫中的命令。
優(yōu)點在于:縮小了執(zhí)行文件的體積踢星,另一方面是加快了編譯速度澳叉,節(jié)省了系統(tǒng)資源。缺點在于:哪怕是只調(diào)用了動態(tài)鏈接庫中的一兩個命令斩狱,也需要附帶相對龐大的鏈接庫耳高;如果計算機上沒有安裝相應(yīng)的動態(tài)鏈接庫,則動態(tài)編譯的可執(zhí)行文件就不能運行所踊。
3泌枪、靜態(tài)鏈接
靜態(tài)鏈接時指把要調(diào)用的函數(shù)或過程直接鏈接到可執(zhí)行文件中,稱為可執(zhí)行文件中一部分秕岛÷笛啵可執(zhí)行文件中包含所有需要的代碼误证。
缺點在于當多個程序都調(diào)用相同函數(shù)時,內(nèi)存就會存在這個函數(shù)的多個拷貝修壕,這樣就浪費了內(nèi)存資源愈捅。
5、動態(tài)鏈接
動態(tài)鏈接是相對靜態(tài)鏈接而言的慈鸠,動態(tài)鏈接所調(diào)用的函數(shù)代碼并沒有拷貝到應(yīng)用程序的可執(zhí)行文件中去蓝谨,而僅僅是在其中加入了所調(diào)用函數(shù)的重定位信息。當應(yīng)用程序被調(diào)入內(nèi)存時青团,在操作系統(tǒng)的管理下譬巫,才在應(yīng)用程序與相應(yīng)的動態(tài)鏈接庫之間建立鏈接關(guān)系督笆。當要執(zhí)行動態(tài)鏈接庫中的函數(shù)時芦昔,根據(jù)鏈接產(chǎn)生的重定位信息,操作系統(tǒng)才轉(zhuǎn)去執(zhí)行相應(yīng)的函數(shù)代碼娃肿。
靜態(tài)鏈接的可執(zhí)行程序能夠在同類操作系統(tǒng)的機器上直接運行咕缎。動態(tài)鏈接的可執(zhí)行文件缺少動態(tài)鏈接庫則不可運行。