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の奇妙なファイル構造/インストール場所の選択と関係があるかもしれないと思いますが、よくわかりません.