目標文件
目標文件是由源代碼編譯而成的二進制文件
源代碼是供開發者閱讀的文本文件,它的體積大,而且本質上都是文本,無法直接被機器使用,所以需要先編譯爲目標文件
一個源代碼文件,經過編譯就會對應生成一個目標文件
靜態鏈接庫
供主程序代碼調用的庫文件,在編譯時,靜態鏈接庫裏面的功能都會被打包到主程序裏,成爲主程序的一部分
動態鏈接庫
供主程序調用,需要跟隨主程序一起發佈,到運行時纔會被動態調用
可執行文件
能夠被操作系統調用,直接啓動一個應用進程的文件
關聯
靜態鏈接庫,動態鏈接庫和可執行文件,都是由目標文件鏈接而來,只是設計用途不一樣
靜態鏈接庫和動態鏈接庫的特徵對比
- 靜態庫會被編譯進主程序,不用擔心庫丟失的問題,適合到處拷貝獨立運行,不依賴於外部環境,獨立性強
- 但由於靜態庫的方式將所有的庫代碼都打包到主程序裏面了,主程序體積就會增大
- 動態庫的共享性強,比如Windows系統中的dll文件,可以被任意程序調用
- 由於Windows中的dll文件是共享的,其它程序就無需再包含了,因此動態庫的方式有利於減小主程序體積
- 動態庫的缺點同樣明顯,它依賴於外部環境,比如Windows系統中常見的dll丟失的問題,每個機子環境是不一樣,到其它機子上可能就無法正常運行了
- 如果程序想要做成便攜式,一個主程序可以到處直接運行的,適合靜態庫模式
- 如果希望程序模塊可以動態升級的,適合動態庫模式,只要替換對應模塊的dll文件,就可以實現升級,其它文件都無需替換,主程序也不需要重啓
文件格式
在Windows中,目標文件爲.obj格式,靜態鏈接庫爲.lib格式,動態鏈接庫爲.dll格式,可執行文件爲.exe格式
在Linux中,目標文件爲.o格式,靜態鏈接庫爲.a格式,動態鏈接庫爲.so格式,可執行文件有.rpm等多種格式