10

ファイルを C ファイルに変換しようとしてい.splます (コンパイラがないため)。サンプルの "Hello World" .spl ファイルがあり、Shakespeare プログラミング言語 .tarをダウンロードして解凍しましたが、次に何をすればよいかわかりません。どのドキュメントにも指示が見つからないようです。誰でも助けることができますか?

編集:

と入力するとmake -f "Makefile"、次の出力が得られます。

bison --verbose -d grammar.y
gcc -O2 -Wall -c grammar.tab.c
gcc -O2 -Wall -c makescanner.c
gcc makescanner.o -O2 -Wall -o makescanner
./makescanner include > scanner.l
flex -Cem -t scanner.l > scanner.c
scanner.l:600: warning, rule cannot be matched
gcc -O2 -Wall -c scanner.c
<stdout>:5823: warning: ‘yyunput’ defined but not used
gcc -O2 -Wall -c strutils.c
gcc grammar.tab.o scanner.o strutils.o -O2 -Wall -lfl -o spl2c
ld: library not found for -lfl
collect2: ld returned 1 exit status
make: *** [spl2c] Error 1
4

5 に答える 5

5

エラー:

ld: library not found for -lfl

flex ライブラリの一部であるライブラリが見つからないことを意味します。

flex ライブラリが既にインストールされているかどうかを確認するには、locate を使用して確認できます。

locate libfl.a

OS X

持っていない場合は、install flex をインストールできます ( brewを使用している場合):

brew install flex

それでも問題が解決しない場合は、make 中に次の変数を手動で渡してみてください。

LDFLAGS="-L/usr/local/Cellar/flex/*/lib" CPPFLAGS="-I/usr/local/Cellar/flex/*/include" make -f "Makefile"

また:

MAKEFLAGS="-j8 -L/usr/local/Cellar/flex/*/lib -I/usr/local/Cellar/flex/*/include" make -f "Makefile"

最終的にDYLD_FALLBACK_LIBRARY_PATH環境を変えることによって。

を実行すると、どの環境が渡されたかがわかりますbrew --env

注: 環境に応じてパスを変更することを確認してください。

関連している:

Linux

ほとんどの一般的な Linux ディストリビューションでは、次の方法でインストールできます。

apt-get install flex

関連している:


OS X (自作)

または、Homebrew を使用して Shakespeare をインストールします。

brew install shakespeare -v

すべての依存関係を検出する必要があります。

于 2013-11-29T11:07:38.093 に答える
1

コマンドで「Makefile」というファイルを実行したいのですが 、端末にmake -f "Makefile"コマンドがあれば問題あり ません。コマンドの名前を入力してからターミナルに入力することで、コマンドがあるかどうかをテストできます。ar gcc flex ranlib tar bison
--help

次にspl2c、コードで (SPL フォルダーに表示されている) を使用して .c ファイルを作成し、それgccを spl.h で挿入して .o ファイルを作成し、最終的にgcclibspl で再度挿入することができます。 .a 最終的なコンパイル済みプログラムを作成します。

念のため、ファイルを次のgccように配置します:
最初のパス: gcc programname.c spl.h -o programname.o
2 番目のパス:gcc programname.o libspl.a -o compiledprogramname

さらに情報が必要な場合はコメントできます。うまくいけば、これが役立つ(または機能する)ことを願っています。

于 2013-04-17T12:18:50.517 に答える
1

Mac を使用している場合、OSX には flex に必要なライブラリが含まれていないようです。それがエラーの原因です。library not found for -lfl

ただし、使用できる同等の代替品があるはずです。Makefile の行を変更するだけで済みます。この行を変更する必要があります。

$(CC) $^ $(CCFLAGS) -ll -o $@

これに:

$(CC) $^ $(CCFLAGS) -lfl -o $@

その後、再度 make を実行して、より良い結果が得られるかどうかを確認してください。

于 2013-05-04T03:01:46.110 に答える
0

実際、OS X Yosemite でも同じ問題が発生しました。

make -f "Makefile"
bison --verbose -d grammar.y
gcc -O2 -Wall -c grammar.tab.c
grammar.y:915:42: warning: illegal character encoding in string literal
      [-Winvalid-source-encoding]
  ...converter by Jon <C5>slund and Karl Hasselstr<F6>m.           *\n");
                      ^~~~                        ~~~~
1 warning generated.
gcc -O2 -Wall -c makescanner.c
gcc makescanner.o -O2 -Wall -o makescanner
./makescanner include > scanner.l
flex -Cem -t scanner.l > scanner.c
scanner.l:600: warning, rule cannot be matched
gcc -O2 -Wall -c scanner.c
<stdout>:5822:17: warning: unused function 'yyunput' [-Wunused-function]
    static void yyunput (int c, register char * yy_bp )
                ^
<stdout>:5867:16: warning: function 'input' is not needed and will not be
      emitted [-Wunneeded-internal-declaration]
    static int input  (void)
               ^
2 warnings generated.
gcc -O2 -Wall -c strutils.c
gcc grammar.tab.o scanner.o strutils.o -O2 -Wall -lfl -o spl2c
ld: library not found for -lfl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [spl2c] Error 1

解決

変更後、「Makefile」を作成できました:

spl2c: grammar.tab.o scanner.o strutils.o
  $(CC) $^ $(CCFLAGS) -lfl -o $@

spl2c: grammar.tab.o scanner.o strutils.o
  $(CC) $^ $(CCFLAGS) -ll -o $@

その間、flex ライブラリをインストールしましたが、それが役に立ったかどうかはわかりません。私のソリューションがフレックス ライブラリなしでは機能しない場合は、次を使用して簡単にインストールできます。

brew install flex

(取得方法はこちらbrew: http://brew.sh )

于 2015-04-11T23:11:46.003 に答える