2012-11-09 51 views
1

我想在Cygwin中编译一个简单的ANTLR3项目(使用C目标构建)。我已经使用标准./configuremakemake install方式安装在C运行时库和库出现安装成功(头文件安装在/cygdrive/e/cygwin/usr/local/include/和库文件是/cygdrive/e/cygwin/usr/local/lib/无法在cygwin下编译ANTLR3项目,在OSX上工作正常

当我使用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“标志也没有按” t工作:

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奇怪的文件结构/安装位置的选择有关,但我不确定。

回答

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稳定),但我今天还了解到有在最新的一些显著C API的变化,3.4版。首先,antlr3AsciiFileStreamNew必须替换为antlr3FileStreamNew(文件名,ANTLR3_ENC_8BIT)。

+0

是的,那篇文章很有用。最后我放弃了试图让它在cygwin上工作,只是在Ubuntu VM中工作。我会接受这个答案的基础上,你提供的有关3.4的变化的信息是花了我很长时间才发现的。 –