2012-03-16 17 views

回答

7

靜態庫基本上只是對象文件的集合。它通常只是目標文件的ar存檔。使用ar,可以從庫中提取目標文件,向其添加不同的目標文件等。

一般來說,動態庫和共享目標文件之間的區別是目標 - Windows使用動態庫,Linux使用共享對象。還有一點點不同,但不是很多。

1

動態(共享)庫使用PIC代碼 - 無論內存中多個可執行文件使用的庫的實際物理位置如何,代碼都可以工作。

靜態庫在鏈接階段鏈接到可執行文件中以創建可執行文件。

動態庫的優點是內存中可執行文件的佔用空間更小。靜態庫的優勢在於,您只需提供可執行文件即可,而無需使用動態庫並且運行速度更快,無需任何工作即可使庫存在物理內存中的任何位置。

+0

但我的問題是關於「庫vs對象文件」而不是「靜態vs動態庫」。我的英語也不是很好:)。所以,如果這一切都是因爲糾結的問題寫作 - 請告訴我。 – Jofsey 2012-03-16 18:26:26

+0

一個庫只是一個文件集合。只要確保收集既可以是共享的,也可以是靜態的。我的答案是告訴你讓文件被共享或靜態的區別。 – 2012-03-16 18:31:35

+1

你的答案在每一個細節都是不正確的;-(在ix86 Linux上,你可以從非'PIC'代碼創建共享庫,靜態庫可以包含'-PIC'代碼,並且可以鏈接到共享庫。使用動態鏈接的可執行文件的佔用空間大於不可用 – 2012-03-17 03:17:57

0

如果碎片庫被多個可執行文件使用,則會節省磁盤空間。如果多個可執行文件使用共享庫中的相同函數。正在運行,每個都會得到自己的副本。磁盤上的可執行文件都不會包含該函數的代碼,而是包含對共享庫的引用。

相關問題