1

我正在尝试在 Cygwin 中编译一个简单的 ANTLR3 项目(使用 C 目标构建)。我已经使用标准./configure, make,make install方法安装了 C 运行时库,并且库似乎安装成功(头文件安装/cygdrive/e/cygwin/usr/local/include//cygdrive/e/cygwin/usr/local/lib/.

当我使用 g++ 编译时(我在项目的其余部分使用 c++ - C++ 目标没有生成 AST 的能力),所有文件都可以正常编译,但链接失败。使用:

g++ -m32 -o compile Main.o Lexer.o Parser.o

给出错误

Main.o:Main.cpp:(.text+0xfc): undefined reference to `_antlr3AsciiFileStreamNew'
Main.o:Main.cpp:(.text+0x12b): undefined reference to `_antlr3CommonTokenStreamSourceNew'
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: Main.o: bad reloc address 0x0 in section `.ctors'
collect2: ld returned 1 exit status

-lantlr3c标志添加到命令中也不起作用,尽管错误有所不同:

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lantlr3c
collect2: ld returned 1 exit status
make: *** [compile] Error 1

最后,将库文件保存在本地目录中并使用“-L”。标志也不起作用:

Main.o:Main.cpp:(.text+0xfc): undefined reference to `_antlr3AsciiFileStreamNew'
Main.o:Main.cpp:(.text+0x12b): undefined reference to `_antlr3CommonTokenStreamSourceNew'
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: Main.o: bad reloc address 0x0 in section `.ctors'
collect2: ld returned 1 exit status

第一个命令在 OSX 上运行良好。有人有什么想法吗?我认为这可能与 Cygwin 奇怪的文件结构/安装位置的选择有关,但我不确定。

4

1 回答 1

2

我成功地在 cygwin 下构建了 python3grammar(由 Ales Teska 编写),C 运行时名为“libantlr3c-3.4”和 gcc-mingw32(ver4.7.0)。

命令:

gcc -m32 *.c output/*.c -Iinclude -I. -L. -lantlr3c  -o py.exe

对于此错误消息;未定义对“_antlr3AsciiFileStreamNew”的引用。

这篇文章可能会有所帮助: http ://contrapunctus.net/blog/2012/antlr-c 这适用于 ANTLR 3.2 版(debian 稳定版),但我今天也了解到最新的 3.4 版有一些重大的 C API 更改. 其一,antlr3AsciiFileStreamNew 必须替换为 antlr3FileStreamNew(filename, ANTLR3_ENC_8BIT)。

于 2012-12-08T18:31:07.257 回答