2

私のマシン (cygwin を実行している Windows) では、正しくコンパイルされます。Flex はバージョン 2.5.35、bison はバージョン 2.3 です。

Linux マシン 1 では正しくコンパイルされます。Flex はバージョン 2.5.4 で、bison はバージョン 1.875c です。

Linux マシン 2 では正しくコンパイルされません。Flex はバージョン 2.5.4 で、bison は 2.3 です。

flex/bison のバージョン番号を見ると、私のマシンで正しくコンパイルされていれば、マシン 2 でも正しくコンパイルされると予想されますが、そうではありません。

Linux マシン 2 で gcc -c y.tab.c を実行すると、次の警告が数回表示されます。

警告: 組み込み関数 'printf' の暗黙の宣言に互換性がありません

そして、次を実行すると

gcc -o cminus y.tab.o lex.yy.o -ly -lfl

次のエラーが表示されます。

gcc -o cminus y.tab.o lex.yy.o -ly -lfl
/usr/bin/ld: cannot find -ly
collect2: ld returned 1 exit status
make: *** [cminus] Error 1

このエラーは、プログラムがコンパイルされるように gcc の -ly オプションを削除することで削除できますが、コンパイルされたプログラムは、私のマシンや他の Linux マシンと同じように正しく機能しません。

問題の原因は何ですか?

4

2 に答える 2

3
/usr/bin/ld: cannot find -ly

リンカーがライブラリを見つけられない場合に表示されるメッセージです。

liby.a または liby.so を見つけて-L<that path>gccコマンドラインに a を挿入する必要があります。

私のCygwinインストールでは、次の場所にある/lib/liby.aので、次のようなものを使用します:

gcc -o cminus y.tab.o lex.yy.o -L /lib -ly -lfl
于 2009-11-18T08:12:32.890 に答える
0

警告は、一部のソース ファイルに「#include」が欠落しているように聞こえます。リンク エラーは、マシンに liby.a がインストールされていないことを意味します。liby は yacc と bison のいくつかのバージョンの一部ですが、実際に必要になることはめったにありません (yyerror のデフォルトの実装とその他のいくつかを定義するだけです)。それなしでリンクするという事実は、あなたが本当にそれを必要としないことを意味します.

正しく機能していないときにプログラムがどのように誤動作するかは言わないので、診断するのは難しいです

于 2009-11-22T20:38:54.927 に答える