web-dev-qa-db-fra.com

erreur: nom de type inconnu "bool"

J'ai téléchargé le code source et voulais compiler le fichier de scanner. Cela produit cette erreur:

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

Et j'ai essayé d'utiliser différents complier pour le compiler, mais il est apparu différentes erreurs.

[meepo@localhost cs143-pp1]$ g++ -o scan Lex.yy.c -ll
/usr/bin/ld: cannot find -ll
collect2: ld returned 1 exit status

Mon OS est 3.0-Arch, je ne sais pas pourquoi c'est arrivé. Comment puis-je corriger l'erreur?

63
Meepo

C90 ne prend pas en charge le type de données booléen.

C99 l'inclut avec ceci, notamment:

#include <stdbool.h>
114
user978122

C99 fait, si vous avez

#include <stdbool.h> 

Si le compilateur ne supporte pas C99, vous pouvez le définir vous-même:

// file : myboolean.h
#ifndef MYBOOLEAN_H
#define MYBOOLEAN_H

#define false 0
#define true 1
typedef int bool; // or #define bool int

#endif

(mais notez que cette définition change ABI pour bool tapez donc la liaison avec les bibliothèques externes compilées avec bool correctement défini peut causer des erreurs d’exécution difficiles à diagnostiquer).

50
Thomas

Ajoutez simplement ce qui suit:

#define __USE_C99_MATH

#include <stdbool.h>
4
M.Hefny

Quelque part dans votre code, il y a une ligne #include <string>. Cela seul vous dit que le programme est écrit en C++. Donc, en utilisant g++ est meilleur que gcc.

Pour la bibliothèque manquante: vous devriez chercher dans le système de fichiers si vous pouvez trouver un fichier nommé libl.so. Utilisez la commande locate, essayez /usr/lib, /usr/local/lib, /opt/flex/lib, ou utilisez la force brute find / | grep /libl.

Une fois le fichier trouvé, vous devez ajouter le répertoire à la ligne de commande du compilateur, par exemple:

g++ -o scan Lex.yy.c -L/opt/flex/lib -ll
4
Roland Illig