Undefined Reference to yywrap
J'ai un simple "langue" que je suis à l'aide de Flex(Analyseur Lexical), c'est comme ça:
/* Just like UNIX wc */
%{
int chars = 0;
int words = 0;
int lines = 0;
%}
%%
[a-zA-Z]+ { words++; chars += strlen(yytext); }
\n { chars++; lines++; }
. { chars++; }
%%
int main()
{
yylex();
printf("%8d%8d%8d\n", lines, words, chars);
}
La je lance un flex count.l
, tout va ok sans erreurs ou des avertissements, puis quand j'ai essayer de faire un cc lex.yy.c
j'ai eu cette erreur:
ubuntu@eeepc:~/Desktop$ cc lex.aa.c
/tmp/ccwwkhvq.o: Dans la fonctionyylex':
yywrap'
lex.yy.c:(.text+0x402): undefined reference to
/tmp/ccwwkhvq.o: Dans la fonctioninput':
yywrap'
lex.yy.c:(.text+0xe25): undefined reference to
collect2: ld a retourné 1 code de sortie
Quel est le problème?
Vous devez vous connecter pour publier un commentaire.
Le scanner appelle cette fonction à la fin du fichier, de sorte que vous pouvez pointer vers un autre fichier et de poursuivre l'analyse de son contenu. Si vous n'en avez pas besoin, utilisez
Bien que la désactivation de
yywrap
est certainement la meilleure option, il peut également être possible d'établir un lien avec-lfl
pour utiliser la valeur par défautyywrap()
fonction dans la bibliothèquefl
(c'est à direlibfl.a
) fournis par flex. Posix exige que la bibliothèque sera disponible avec l'éditeur de liens drapeau-ll
et la valeur par défaut OS X, installez dispose uniquement que de nom.Je préfère définir ma propre yywrap(). Je compile en C++, mais le point devrait être évident. Si quelqu'un appelle le compilateur avec plusieurs fichiers sources, je les stocke dans une liste ou un tableau, et ensuite yywrap() est appelée à la fin de chaque fichier pour vous donner une chance de continuer avec un nouveau fichier.
flex n'est pas toujours installer avec sa librairies de développement (ce qui est étrange, comme c'est un outil de développement). Installer les bibliothèques, et la vie est meilleure.
Sur Redhat systèmes de base:
Sur les systèmes basés sur Debian
Comme une note pour les adeptes, flex 2.6.3 a un bug où libfl.une "habitude" définir yywrap mais puis n'est-ce pas, dans certains cas, afin de vérifier si votre version de flex, pourrait être lié à votre problème:
https://github.com/westes/flex/issues/154
utiliser ce code à la fin du programme..Simple