C中存在未定义的引用错误

Undefined reference error in C

本文关键字:引用 错误 未定义 存在      更新时间:2023-10-16

我正在使用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"的未定义引用

我不知道如何解决这个错误,因为antlr3defs.h中确实声明了antlr3StringStreamNew。尽管我找不到它的定义。

如果这与antlr3c的3.4版本不兼容有关(因为我已经安装了3.2版本)。如果确实是这样,那么在antlr3c3.4版本中是否有任何替代功能可以让我实现相同的功能。

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

如果你像这样包围你的头include,链接器应该找到符号:

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

结果是,您的代码使用对C样式函数名的引用进行编译,从而允许链接器将它们与antlr3库的对象文件中的相应符号进行匹配。