ошибка: неизвестное имя типа "bool" - PullRequest
61 голосов
/ 15 ноября 2011

Я скачал исходный код и хотел скомпилировать файл сканера. Выдает эту ошибку:

[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.

И я пытался использовать другой complier для его компиляции, но появились разные ошибки.

[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, я не знаю, почему это произошло. Как мне исправить ошибку?

Ответы [ 4 ]

111 голосов
/ 15 ноября 2011

C90 не поддерживает логический тип данных.

C99 включает в себя следующее:

#include <stdbool.h>
50 голосов
/ 17 ноября 2011

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, могут возникнуть трудно диагностируемые ошибки времени выполнения).

4 голосов
/ 23 декабря 2013

Просто добавьте следующее:

#define __USE_C99_MATH

#include <stdbool.h>
4 голосов
/ 15 ноября 2011

Где-то в вашем коде есть строка #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
...