Antlr C运行时示例中的未定义引用

时间:2011-10-01 22:33:12

标签: c++ c antlr

我在Antlr的http://www.antlr.org/depot/examples-v3/C/treeparser运行C运行时示例时遇到问题。

我已从http://www.antlr.org/download/C下载并安装了C运行时。 libantlr3c.a库位于/ usr / local / lib中,antlr头文件位于/ usr / local / include中。这是正确的antlr库吗?在其他例子中,我看到了提到的“antlr3c”库,而我的前面有“lib”。

我下载了示例文件并将它们放在/ home / fraser / examples中名为“example”的文件夹中。然后我让Antlr创建自动生成的Parser和Lexer文件,然后从那里运行:

gcc *.c -o test -I. -L -llibantlr3c

它给了我以下错误:

/tmp/ccvXlH3T.o: In function `LangDumpDeclNewSSD':
LangDumpDecl.c:(.text+0x89): undefined reference to `antlr3TreeParserNewStream'
/tmp/cc3TwzKz.o: In function `LangLexerNewSSD':
LangLexer.c:(.text+0xd3): undefined reference to `antlr3LexerNewStream'
/tmp/ccpfbaFf.o: In function `LangParserNewSSD':
LangParser.c:(.text+0x8c): undefined reference to `antlr3ParserNewStream'
LangParser.c:(.text+0xf1): undefined reference to `ANTLR3_TREE_ADAPTORNew'
LangParser.c:(.text+0x103): undefined reference to `antlr3VectorFactoryNew'
/tmp/ccpfbaFf.o: In function `decl':
LangParser.c:(.text+0x6ca): undefined reference to `antlr3RewriteRuleSubtreeStreamNewAE'
LangParser.c:(.text+0x76f): undefined reference to `antlr3RewriteRuleTOKENStreamNewAE'
LangParser.c:(.text+0x811): undefined reference to `antlr3RewriteRuleTOKENStreamNewAE'
LangParser.c:(.text+0x85d): undefined reference to     `antlr3RewriteRuleSubtreeStreamNewAEE'
/tmp/ccED3tJV.o: In function `main':
main.c:(.text+0x46): undefined reference to `antlr3AsciiFileStreamNew'
main.c:(.text+0xe0): undefined reference to `antlr3CommonTokenStreamSourceNew'
main.c:(.text+0x1d0): undefined reference to `antlr3CommonTreeNodeStreamNewTree'
collect2: ld returned 1 exit status

我以前唯一使用过Antlr的经验是使用Java,而我以前唯一的C / C ++经验是使用Visual Studio,所以我不熟悉链接和命令行编译等等。所以我猜这是一个涉及错误链接或错误的antlr库的非常简单的错误。

道歉并提前致谢。

2 个答案:

答案 0 :(得分:2)

您正在使用不带参数的-L选项。选项-llibantlr3c被视为-L的目录参数,而不是要链接的库。由于antlr库未包含在链接中,因此您将获得所有缺少的符号。另外,-l将'lib'添加到库名称,所以请尝试

gcc *.c -o test -I. -lantlr3c

如果libantlr3c.a文件位于非标准目录中,则使用-L标志添加该目录

答案 1 :(得分:0)

在3.4版之后,请转到 input = antlr3FileStreamNew((pANTLR3_UINT8)argv [1],ANTLR3_ENC_8BIT);

不是,antlr3AsciiFileStreamNew(argv [1])作为例子 参考中山真司 http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3

相关问题