ソースコードをダウンロードし、スキャナーのファイルをコンパイルしたかった。次のエラーが生成されます。
[meepo@localhost cs143-pp1]$ gcc -o Lex.yy.o Lex.yy.c -ll
In file included from scanner.l:15:0:
scanner.h:59:5: error: unknown type name ‘bool’
In file included from scanner.l:16:0:
utility.h:64:38: error: unknown type name ‘bool’
utility.h:74:1: error: unknown type name ‘bool’
In file included from scanner.l:17:0:
errors.h:16:18: fatal error: string: No such file or directory
compilation terminated.
また、別のコンパイラを使用してコンパイルしようとしましたが、異なるエラーが発生しました。
[meepo@localhost cs143-pp1]$ g++ -o scan Lex.yy.c -ll
/usr/bin/ld: cannot find -ll
collect2: ld returned 1 exit status
私のOSは3.0-Archです、なぜこれが起こったのか分かりません。エラーを修正するにはどうすればよいですか?
C90はブールデータ型をサポートしていません。
C99には、次のインクルードが含まれています。
#include <stdbool.h>
C99は、もしあれば
#include <stdbool.h>
コンパイラがC99をサポートしていない場合、自分で定義できます。
// file : myboolean.h
#ifndef MYBOOLEAN_H
#define MYBOOLEAN_H
#define false 0
#define true 1
typedef int bool; // or #define bool int
#endif
(ただし、この定義は ABI がbool
タイプに変更されるため、適切に定義されたbool
でコンパイルされた外部ライブラリに対してリンクすると、診断が困難なランタイムエラーが発生する可能性があります) 。
以下を追加してください:
#define __USE_C99_MATH
#include <stdbool.h>
コードのどこかに#include <string>
という行があります。これ自体は、プログラムがC++で記述されていることを示しています。したがって、g++
を使用するほうがgcc
よりも優れています。
不足しているライブラリの場合:libl.so
というファイルが見つかった場合は、ファイルシステムを確認する必要があります。 locate
コマンドを使用するか、/usr/lib
、/usr/local/lib
、/opt/flex/lib
を試すか、ブルートフォースfind / | grep /libl
を使用します。
ファイルを見つけたら、次のようにディレクトリをコンパイラのコマンドラインに追加する必要があります。
g++ -o scan Lex.yy.c -L/opt/flex/lib -ll