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