我一直在尋找和閱讀了一段時間,但仍然無法得到乾淨的答案:運行庫和動態庫
什麼是運行時庫和動態庫之間的區別?
具體而言,我想知道以下幾個方面:
如何在建設過程中運行時庫的工作?
它爲什麼叫做「運行時」?它是否總是被加載到內存中?
我一直在尋找和閱讀了一段時間,但仍然無法得到乾淨的答案:運行庫和動態庫
什麼是運行時庫和動態庫之間的區別?
具體而言,我想知道以下幾個方面:
如何在建設過程中運行時庫的工作?
它爲什麼叫做「運行時」?它是否總是被加載到內存中?
通常有類型的圖書館來講可執行如何訪問它們:
靜態庫往往在構建時鏈接到可執行文件,通常由鏈接器。因此可執行文件永遠與這些庫「卡在一起」。
動態庫是「後期綁定」的,它們往往在代碼運行或即將運行時與您的可執行文件鏈接。這就是運行時意味着什麼,在運行時完成的,與編譯時靜態鏈接相對比)。
自動加載一個由操作系統(加載程序)處理,而無需在代碼中執行任何特定操作。在構建時,您已經指定了在可執行文件加載時需要什麼庫,但是這些庫與可執行文件的實際鏈接稍後會發生。
這意味着您可以替換庫以影響您的可執行文件的工作方式,不需要重新鏈接可執行文件(與靜態鏈接不同)。
手動動態庫是您從代碼中明確加載庫的位置,可調用諸如dlopen
(打開庫)和dlsym
(以獲取該庫中符號的地址)。
您可能還想看看this answer,關於靜態/動態的區別。
覆蓋類型你很可能會遇到,但是,在你在註釋中提供的鏈接而言庫,它出現在「運行時庫」,這裏被稱爲是一個簡單的提供一些語言功能的庫。
例如,C運行時庫是一個庫,其中包含用於打開文件的fopen()
或用於複製字符串的strcpy()
。儘管編譯器理解核心語言(if
,while
等,包括如何調用函數),但非核心語言功能是作爲包含可調用函數的庫提供的。從這個意義上說,動態庫和運行時庫之間的差異是不協調的,因爲它們涉及不同的概念。運行時庫可以提供爲靜態的或動態。
[靜態庫和共享庫之間的差異?](http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-libraries) – Abhinav 2016-08-31 00:55:41