2013-05-27 155 views
0

這也許真是愚蠢,但我遇到下面的錯誤,而試圖編譯某些代碼模塊,使用cmake不能找到錯誤CPP的Linux

acg_localizer_active_search.cc:(.text+0x43c6): undefined reference to    
    `ANNkd_tree::ANNkd_tree(float**, int, int, int, ANNsplitRule)' 
    acg_localizer_active_search.cc:(.text+0x4441): undefined reference to  
    `ANNkd_tree::ANNkd_tree(float**, int, int, int, ANNsplitRule)' 
  1. 請幫我明白這是什麼未定義參考錯誤的意思。
  2. 提到'.text + 0x ...'的錯誤行是不可理解的。我怎樣才能找到錯誤。

我被困了一段時間,解決錯誤後的錯誤,並在這裏結束。請幫幫我。在此先感謝

對不起,沒有添加代碼。它大約在2000行左右,我不確定在哪裏找到這個錯誤。它是軟件包的一部分,稱爲acg_localizer。

+0

1.這是一個鏈接器錯誤,鏈接器找不到符號。您需要將包含它的庫或目標文件放在命令行上。 –

+0

您是否定義並鏈接了'ANNkd_tree :: ANNkd_tree'? – billz

+0

未定義的引用是鏈接器錯誤。這不是編譯錯誤。您沒有在錯誤消息中定義事件,您忘記鏈接定義它的文件,忘記鏈接到定義它的庫,或者如果它是靜態庫,則鏈接器命令行上的順序不正確。檢查哪一個。 (請注意,有些鏈接器稱它爲無法解析的外部鏈接) – PlasmaHH

回答

1

這是鏈接時間錯誤。在鏈接命令中指定的任何庫和對象文件中都找不到方法ANNkd_tree::ANNkd_tree(float**, int, int, int, ANNsplitRule),雖然它被引用。

您必須找出它的定義位置,並確保它定義的庫位於鏈接器命令行上使用它的庫之後。

您可以使用nm工具找出哪些符號(=變量,方法)由對象文件或庫定義或使用。做一個man nm(或谷歌搜索)瞭解更多。