错误: 未知类型名称‘ 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

我的操作系统是3.0-ARCH,我不知道为什么会发生这种情况。我如何修复错误?

276671 次浏览

C90不支持布尔。

C99确实包括以下内容:

#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

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

(但是请注意,这个定义改变了 bool类型的 ABI,因此链接到使用正确定义的 bool编译的外部库可能会导致难以诊断的运行时错误)。

只需添加以下内容:

#define __USE_C99_MATH


#include <stdbool.h>