簡體   English   中英

static 和共享庫及其交叉鏈接

[英]static and shared library and their cross linking

在閱讀了很多線程之后,我仍然對共享庫和 static 庫以及它們如何交叉鏈接的方式感到困惑。

所以我的理解是,當我有一個鏈接到 static 庫的可執行文件時,可執行文件會將其所需的函數/資源的全部內容復制到自身中,因此當它運行時,它不再需要 static 庫。 如果可執行文件鏈接到一個共享庫,那么它只會為它需要的所有內容創建占位符,因此當它運行時,它需要路徑中的共享庫,因此它可以將內容加載到占位符。

如果上面的說法是正確的,那么下面的說法是否正確?

  1. 當我構建一個鏈接到共享庫B的 static 庫A ,然后構建一個可執行的C鏈接到A以獲取最初來自B的函數時。 結果,當我運行C時,我不會A ,因為所有需要的內容都已經在C中,但仍然需要B
  2. 當我構建一個鏈接到 static lib 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM