2013-05-27 156 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(或谷歌搜索)了解更多。