連結器與載入器與執行檔格式
連結C語言程式時出現「undefined reference to `foo'」(對foo的未定義參照)錯誤,最可能的原因為下列何者?
- Afoo之中有語法錯誤
- B在兩個檔案中都定義了foo
- C有呼叫foo,但定義foo內容的檔案或函式庫未包含在連結之中
查看答案與解析
正確答案:C. 有呼叫foo,但定義foo內容的檔案或函式庫未包含在連結之中
只要在標頭檔中宣告了函式,編譯就能通過。但連結時若找不到定義foo的目的檔或函式庫,就無法決定要填入呼叫指令的位址,因而出現此錯誤。常見原因有:忘了連結定義的檔案、忘了指定函式庫(如-lm等)、因名稱拼寫或參數不同而變成另一個名稱等。
- A. 若是語法錯誤,會在編譯階段就停止。
- B. 若有兩個,會出現重複定義的錯誤。
- C. 正確。這是有宣告但找不到定義的狀態。