无法在cygwin下编译ANTLR3项目,在OSX上运行正常

时间:2012-11-09 01:41:13

标签: g++ cygwin antlr3

我正在尝试在Cygwin中编译一个简单的ANTLR3项目(使用C目标构建)。我已经使用标准./configuremakemake 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奇怪的文件结构/安装位置选择有关,但我不确定。

1 个答案:

答案 0 :(得分: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 stable),但我今天也了解到最新版本3.4中有一些重要的C API更改。首先,必须用antlr3FileStreamNew(filename,ANTLR3_ENC_8BIT)替换antlr3AsciiFileStreamNew。