1

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

4

1 に答える 1

2

「libantlr3c-3.4」という名前のCランタイムとgcc-mingw32(ver4.7.0)を使用して、cygwinでpython3grammar(Ales Teskaによる)を構築することに成功しました。

指示:

gcc -m32 *.c output/*.c -Iinclude -I. -L. -lantlr3c  -o py.exe

このエラー メッセージについては、`_antlr3AsciiFileStreamNew' への未定義の参照。

この記事は参考になるかもしれません: http://contrapunctus.net/blog/2012/antlr-c これは ANTLR バージョン 3.2 (debian 安定版) で動作しますが、最新のバージョン 3.4 には重要な C API の変更があることも今日知りました。 . 1 つには、antlr3AsciiFileStreamNew を antlr3FileStreamNew(filename, ANTLR3_ENC_8BIT) に置き換える必要があります。

于 2012-12-08T18:31:07.257 に答える