Ответ 1
C90 не поддерживает тип данных boolean.
C99 включает в себя:
#include <stdbool.h>
Я загрузил исходный код и хотел скомпилировать файл сканера. Он вызывает эту ошибку:
[[email protected] 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.
И я попытался использовать другой компилятор для его компиляции, но появились разные ошибки.
[[email protected] 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 не поддерживает тип данных boolean.
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
Просто добавьте следующее:
#define __USE_C99_MATH
#include <stdbool.h>
Где-то в вашем коде есть строка #include <string>
. Это само по себе говорит вам, что программа написана на С++. Поэтому использование 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