1.對于C/C++語言來說,編譯器默認(rèn)函數(shù)和初始化了的全局變量為強(qiáng)符號,未初始化的全局變量為若符號。
2.強(qiáng)符號規(guī)則:一、不允許強(qiáng)符號被多次定義。二、如果一個符號在某目標(biāo)文件中是強(qiáng)符號,在其他文件中是若符號,那么選擇強(qiáng)符號
3.如果一個符號在所有的目標(biāo)文件中都是若符號,則選擇其中占用空間最大的一個如:A定義全局變量GLOBAL為INT型,占4個字節(jié),目標(biāo)B定義GLOBAL為DOULBE型,占8個字節(jié),那么目標(biāo)文件A和B鏈接后,符號GLOBAL占8個字節(jié)。
4.強(qiáng)引用,對外部目標(biāo)文件的符號引用在目標(biāo)文件被最終鏈接成可執(zhí)行文件時,它們必須要被正確決議,如果沒有找到該符號的定義,鏈接器就會報符號未定義錯誤,這種被稱為強(qiáng)引用。與之相對應(yīng)的還有一種弱引用,原理與強(qiáng)引用一模一樣,只不過鏈接器不認(rèn)為這是一個錯誤。
5.鏈接時符號未定義,導(dǎo)致這個問題的情況非常多,最常見的一般就是鏈接時缺少某個庫。或者輸入目標(biāo)文件路徑不正確或符號的聲明與定義不一樣。