Pages : 1
#1 Le 09/06/2006, à 08:26
- Lex Etyacc
problème de compilation avec lex
Pour commencer, mon code (on sait jamais)
%{
#include <stdio.h>
#include <stdlib.h>
int opt_rep = 0;
FILE *opt_log;
%}
%x TOTAL
%%
"Optimization Report" opt_rep = 1;
"Phase : "[a-z ]* if(opt_rep) fprintf(opt_log,"%s\n",yytext);
"TOTAL transformations" if(opt_rep) BEGIN TOTAL;
\n ;
. ;
<TOTAL>[1-9]+ {
fprintf(opt_log,"\tTOTAL transformation : %s\n",yytext);
opt_rep = 0;
BEGIN INITIAL;
}
<TOTAL>. ;
%%
int main()
{
opt_log = fopen("optimisation_log","a");
yylex();
fclose(opt_log);
}
La séquence de commandes que j'utilise :
flex nb_opt.lex
gcc -lfl -o nb_opt lex.yy.c
Et enfin, le problème
/tmp/ccOVB5VD.o : Dans la fonction "main":lex.yy.c:(.text+0x1821): définitions multiples de « main » /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../lib/libfl.a(libmain.o):/build/buildd/flex-2.5.31/libmain.c:29: défini pour la première fois ici /usr/bin/ld: Warning: size of symbol `main' changed from 23 in /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../lib/libfl.a(libmain.o) to 73 in /tmp/ccOVB5VD.o /tmp/ccOVB5VD.o : Dans la fonction "yylex":lex.yy.c:(.text+0x444): référence indéfinie vers « yywrap » /tmp/ccOVB5VD.o : Dans la fonction "input":lex.yy.c:(.text+0xde3): référence indéfinie vers « yywrap » collect2: ld a retourné 1 code d'état d'exécution
C'est la première fois que ça me fait ça
A oui, les derniers détails manquants
Je suis sur une dapper drake (kubuntu 6.06) et j'ai fait tous les updates/upgrades dispos avec adept. Tout ayant été installé hier, j'ai à priori les dernières versions de gcc (4.0) flex et des librairies.
Des idées ?
Lex
Kubuntu Dapper Drake (kernel 2.6.15-25-686-smp) sur P4-HT 2.8GHz, 1Go RAM
Kubuntu Dapper Drake (kernel 2.6.15-23-386) sur Celeron 1.7GHz, 512Mo RAM
Kubuntu Dapper Drake (kernel 2.6.15.23-386) sur Core Duo T2400, 1G0 RAM
Hors ligne
#2 Le 12/06/2006, à 07:39
- Lex Etyacc
Re : problème de compilation avec lex
Bon, j'ai trouvé la solution tout seul en essayant plein de choses finalement
Si jamais quelqu'un a le même problème pour le règler il suffit de compiler avec les flags -lfl ET -ll apparemment dans mon cas il lui fallait les deux librairies.
Lex
Kubuntu Dapper Drake (kernel 2.6.15-25-686-smp) sur P4-HT 2.8GHz, 1Go RAM
Kubuntu Dapper Drake (kernel 2.6.15-23-386) sur Celeron 1.7GHz, 512Mo RAM
Kubuntu Dapper Drake (kernel 2.6.15.23-386) sur Core Duo T2400, 1G0 RAM
Hors ligne