1

雖然尋找到編程語言Red,我遇到了以下項在它的路線圖:什麼是共享靜態庫?

共享靜態庫(.a)中

這似乎是一個矛盾的說法給我;我的印象是,共享庫在運行時被加載(在編譯時連接了一個較小的靜態庫,它的導出符號被鏈接),並且靜態庫在編譯時被鏈接?

我的問題是

什麼是shared static library

其他信息

,這是在爲File Format Emitters下的情況下,分類別Mach-othis link是第一個地方,我注意到了,但仔細檢查後,它提到的所有的地方。

+0

沒有這樣的事情。可能是文檔中的錯誤。 –

+0

@ n.m。你確定?經過仔細檢查,實際上在整個路線圖的多個地方都提到了它。 – OMGtechy

+0

「共享靜態庫」是一個在互聯網有記錄的歷史中大約使用過9次的術語,顯然是用來描述兩三種不同的東西。我認爲確切知道紅色作者的意思的唯一方法是直接詢問他們。 –

回答

1

(紅色的主要作者在這裏)我會說一個糟糕的詞語選擇,可能是由另一個快速複製/粘貼的HTML片段引起的,並且重新閱讀很差。 :-)

感謝您的注意。

+0

謝謝:)以爲它看起來很奇怪! – OMGtechy

-2

通常情況下,靜態庫由原理共享,但對於靜態庫而言,共享詞有另一個定義。

在C/C++中,共享靜態庫是一個標準的靜態鏈接庫,由一個應用程序和一個應用程序的偏移空間位置共享,並且所有動態庫都在win上(對於linux也是一樣,但在Linux上默認情況下它是一個選項) 。

MyApp.exe和MyDll.dll通過示例鏈接到具有共享基類和靜態計數器的靜態Shared.Core.lib的相同版本 - 當MyApp.exe在內存中加載MyDll.dll時。如何處理重複的Shared.Core.lib?

通常情況下,您不希望Shared.Core.lib的重複副本在內存中具有重複的共享基類定義。爲了解決這個問題,當你加載其他動態庫時,你必須將靜態庫加載到特定的地址而不覆蓋它。應用程序加載器工作。

以lib您節省的內存數量,你可以分享你所有的應用程序/ DLL

的問題來與versionning之間所有的公用事業和靜態數據或基類(在公共插件版本的情況下共享靜態)的lib。所有版本都必須使用相同的靜態庫,並且lib必須在鏈接器知道的地址空間中加載。或者爲特定的lib版本使用特定的加載地址,但在這裏會變得複雜,我從來沒有測試過共享靜態庫的多個副本。

使用共享靜態庫是一個編譯器鏈接器選項,用於在內存應用程序的固定地址設置庫。 這似乎是win32(帶有/固定標誌的vstudio)的標準選項,它是linux gcc(我不記得該標誌)的選項。