如果我有一個項目,其中有兩個模塊A
和B
,並且它們都與第三個庫C
鏈接。動態庫vs運行時的靜態庫
這是真的,如果C
從A
和B
靜態庫,然後調用C
由各自保持的C
一個獨立的國家?他們有不同的堆?
在另一方面,如果C
是一個共享庫,然後A
和B
將有機會獲得的C
共享狀態?
p.s.應用程序入口點位於A
或B
。
如果我有一個項目,其中有兩個模塊A
和B
,並且它們都與第三個庫C
鏈接。動態庫vs運行時的靜態庫
這是真的,如果C
從A
和B
靜態庫,然後調用C
由各自保持的C
一個獨立的國家?他們有不同的堆?
在另一方面,如果C
是一個共享庫,然後A
和B
將有機會獲得的C
共享狀態?
p.s.應用程序入口點位於A
或B
。
這取決於你的操作系統,以及你用來編譯鏈接的選項和 鏈接。在Unix下,默認情況下,兩個或多個共享庫中的所有常用符號將解析爲加載的第一個庫 中的名稱;對於大多數Unices而言,這適用於主井名稱爲 的井(但在Linux中使用的GNU鏈接程序需要特殊選項 )。在Windows下,這有點棘手;每個靜態鏈接庫都會擁有自己的狀態副本,並且不會有簡單的解決方法,除了創建第三個DLL來包裝 靜態庫,並且只能通過該DLL中的符號訪問它。
它非常依賴於您的操作系統。 Windows DLL與\ * nix共享對象的工作方式非常不同,並且\ nix和鏈接方法的所有風格都沒有單一工作模式。 –