符號及符號表


符號的定義和引用

鏈接符號的類型

鏈接符號類型舉例

目標文件中的符號表

 

符號表信息舉例

符號解析(Symbol Resolution)

全局符號的強、弱

 

鏈接器對符號的解析規則

多重定義符號的處理規則
Rule 1: 強符號不能多次定義
    – 強符號只能被定義一次,否則鏈接錯誤
Rule 2: 若一個符號被定義為一次強符號和多次弱符號,則
按強定義為准
    – 對弱符號的引用被解析為其強定義符號
Rule 3: 若有多個弱符號定義,則任選其中一個
    – 使用命令 gcc –fno-common鏈接時,會告訴鏈接器在
    遇到多個弱定義的全局符號時輸出一條警告信息。
    符號解析時只能有一個確定的定義(即每個符號僅占一處存儲空間)

 

多重定義符號的解析舉例

多重定義全局符號的問題

盡量避免使用全局變量
• 一定需要用的話,就按以下規則使用
    – 盡量使用本地變量(static)
    – 全局變量要賦初值
    – 外部全局變量要使用extern
多重定義全局變量會造成一些意想不到的錯誤,而且是默默發生的,編譯系統不會警告,並會在程序執行很久后才能表現出來
,且遠離錯誤引發處。特別是在一個具有幾百個模塊的大型軟件中,這類錯誤很難修正。
大部分程序員並不了解鏈接器如何工作,因而養成良好的編程習慣是非常重要的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM