2013-04-03 76 views
0

GNU Binutils ld中這些錯誤有什麼區別?ld:undefined symbol vs ld:undefined reference

  • 未定義參考
  • 未定義的符號

我有一個未定義的引用有很好的理解:出現這種情況,例如當加載器不能找到一個函數的實現。我很想知道未定義符號的原因。

回答

1

例如當你在你的linkerscript中使用尚未定義的符號進行一些算術運算時。在我的情況下,這主要是由於錯字。

_syma = 1 ; 
_syna += 1 ; 
/* error: undefined symbol `_syna' referenced in expression */ 

_syma = 1 ; 
_symb = _syna + 1 ; 
/* error: undefined symbol `_syna' referenced in expression */ 

當你分配一個輸出部分未定義的符號,你會得到另一個錯誤:

_syma = 1 ; 
.text _syna : 
/* error: non constant or forward reference address expression for section .text */ 
{ 
    *(.text) ; 
}