无法在cygwin下编译ANTLR3项目,在OSX上工作正常



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

当我使用G 编译时(我正在为项目其余部分使用C - C 目标没有生成ASTS的能力),这些文件全部编译了,但是链接失败了。使用:

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的怪异文件结构/安装位置的选择有关。

我成功地在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://contrapuctus.net/blog/2012/antlr-c这与Antlr 3.2版(Debian Stable)一起使用,但我今天还了解到,最新版本3.4中有一些重大的C API更改。首先,必须将antlr3aSciifileStreamNew替换为antlr3filestreamnew(文件名,antlr3_enc_8bit)。

最新更新