C中未定义的引用错误

时间:2014-10-15 23:14:05

标签: c++ c ubuntu ubuntu-12.04

我正在使用C库antlr3c。我使用以下命令安装了库:sudo apt-get install libantlr3c-dev

#include "antlr3defs.h"
..

string DBparser::sparqlParser(const string& _sparql, SPARQLquery& _sparql_query)
{
    pANTLR3_INPUT_STREAM input;
    pSparqlLexer lex;
    pANTLR3_COMMON_TOKEN_STREAM tokens;
    pSparqlParser parser;
    input = antlr3StringStreamNew((ANTLR3_UINT8 *)(_sparql.c_str()),ANTLR3_ENC_UTF8,_sparql.length(),(ANTLR3_UINT8 *)"QueryString");
}

当我运行包含上述片段的程序时,我收到错误: NetBeansProjects / gstore / Parser / DBparser.cpp:25:未定义引用`antlr3StringStreamNew'

我没有得到如何解决这个错误,因为antlr3StringStreamNew确实是在antlr3defs.h中声明的。虽然我无法找到它的定义。

如果这与antlr3c的3.4版本不兼容(因为我已经安装了3.2版本)。如果情况确实如此,那么在antlr3c版本3.4中是否有任何替代功能,通过它我可以实现相同的功能。

1 个答案:

答案 0 :(得分:1)

Keith是对的 - 由于C ++名称错误,您正在使用的链接器需要不同的符号。因此,虽然您的代码将进行编译,但在链接阶段它会因该错误而失败。

如果您将标题包含在内,则链接器应找到符号:

extern "C" {
    #include "antlr3defs.h"
}

结果是你的代码编译了对C风格函数名的引用,允许链接器将它们与antlr3库的目标文件中的相应符号相匹配。