[英]static and shared library and their cross linking
在閱讀了很多線程之后,我仍然對共享庫和 static 庫以及它們如何交叉鏈接的方式感到困惑。
所以我的理解是,當我有一個鏈接到 static 庫的可執行文件時,可執行文件會將其所需的函數/資源的全部內容復制到自身中,因此當它運行時,它不再需要 static 庫。 如果可執行文件鏈接到一個共享庫,那么它只會為它需要的所有內容創建占位符,因此當它運行時,它需要路徑中的共享庫,因此它可以將內容加載到占位符。
如果上面的說法是正確的,那么下面的說法是否正確?
B
的 static 庫A
,然后構建一個可執行的C
鏈接到A
以獲取最初來自B
的函數時。 結果,當我運行C
時,我不會A
,因為所有需要的內容都已經在C
中,但仍然需要B
B
的共享庫A
,然后構建一個可執行的C
鏈接到A
以獲取最初來自B
的函數時。 結果,當我運行C
時,我只需要A
而不是B
因為所需的所有內容都已經在A
中。當我有一個鏈接到 static 庫的可執行文件時,可執行文件會將其所需的函數/資源的全部內容復制到自身中,因此當它運行時,它不再需要 static 庫
正確的。
如果可執行文件鏈接到共享庫,那么它只會為它需要的所有內容創建占位符,所以當它運行時,它需要路徑中的共享庫
當然,它需要訪問共享庫。 找到共享庫的規則因平台而異。
當我構建一個鏈接到共享庫 B 的 static 庫 A,然后構建一個可執行的 C 鏈接到 A 以獲取最初來自 B 的函數時。結果,當我運行 Z0D61F8370CAD1D412F80B84D1因為所有需要的內容都已經在 C 中,但仍然需要 B。
正確的
當我構建一個鏈接到 static 庫 B 的共享庫 A,然后構建一個可執行的 C 鏈接到 A 以獲取最初來自 B 的函數時。結果,當我運行 Z0D61F8370CAD1D3E B12F80B84D1 而不是 A所有需要的內容都已經在A中
正確的
本質上,當您鏈接到 static 庫時,您在運行時永遠不需要它,而當您鏈接到共享庫時,您需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.