linker如何解析多處定義的全域性符號 讀書摘記

2021-05-04 01:15:29 字數 402 閱讀 1549

from:深入理解計算機系統

對於全域性符號的引用解析,當編譯器遇到乙個不是在當前模組中定義的符號(變數或函式名)時,它會假設該符號是在其他某個模組中定義的,生成乙個linker符號表表目,並把它交給linker處理。如果linker在它的任何輸入模組中都找不到這個被引用的符號,它就輸出一條錯誤資訊並終止。

在編譯時,編譯器輸出每個全域性符號給彙編器,或者是強(strong),或者是弱(weak),而彙編器把這個小溪隱含地編碼在可重定位目標檔案的符號表裡。函式和已初始化的的全域性變數是強符號,未初始化的全域性變數是弱符號。

unix linker使用下面的規則來處理多出定義的符號:

1. 不允許有多個強符號

2. 如果有乙個強符號和多個弱符號,選擇強符號

3. 如果有多個弱符號,那麼從這些弱符號中任選乙個

如何解析超長的protobuf

在呼叫protobuf的parsefromstring str 方法時,預設情況下,如果str的長度 64mb,會返回失敗。這裡給出了解釋,主要是出於安全因素的考慮。可以通過settotalbyteslimit方法去除這個限制 google protobuf message req google p...

DNS是如何解析的?

dns domain name system,負責將使用者請求的網域名稱解析為對應機器的ip位址。眾所周知,網際網路上的每一台機器的身份是由ip位址標識的,而我們想要與任何一台機器進行通訊都必須知道它的ip位址,然而,由於ip位址對人類來說難於記憶,因此就產生了網域名稱。就拿www.baidu.co...

後台如何解析html

string str 空白字型只是斜體斜體劃線 1111111加粗劃線樣式空白字型只是斜體斜體劃線 上面這個str字串,如何解析出類似於 文字 該文字塊有哪些屬性 i u b 文字樣式 public class fontstyle public void setisb boolean isb pub...