web-dev-qa-db-ja.com

エラー:不明なタイプ名「bool」

ソースコードをダウンロードし、スキャナーのファイルをコンパイルしたかった。次のエラーが生成されます。

[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です、なぜこれが起こったのか分かりません。エラーを修正するにはどうすればよいですか?

63
Meepo

C90はブールデータ型をサポートしていません。

C99には、次のインクルードが含まれています。

#include <stdbool.h>
114
user978122

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

(ただし、この定義は ABIboolタイプに変更されるため、適切に定義されたboolでコンパイルされた外部ライブラリに対してリンクすると、診断が困難なランタイムエラーが発生する可能性があります) 。

50
Thomas

以下を追加してください:

#define __USE_C99_MATH

#include <stdbool.h>
4
M.Hefny

コードのどこかに#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
4
Roland Illig