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?
C90 ne prend pas en charge le type de données booléen.
C99 l'inclut avec ceci, notamment:
#include <stdbool.h>
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).
Ajoutez simplement ce qui suit:
#define __USE_C99_MATH
#include <stdbool.h>
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