Moin moin! Laut yast sind flex und yacc installiert. Auch kann ich 'flex test.lex" und "yacc test.y" ausfuehren ohne Meldungen zu bekommen. Die Ausgabedateien "lex.yy.c" und "y.yab.c" bekomme ich auch. Wenn ich die durch den compiler jage (lex.yy.c ist mit "#include" in test.y drin: gcc y.tab.c -ly -ll -o run bekomme ich die Meldung, das ly und ll nicht gefunden werden. Und ohne die libraries werden die ganzen lex Funktionen nicht erkannt... Ich habe es mit diversen compilern probiert und auch -ly -ll vor y.tab.y gesetzt. Kein Unterschied. Im yast habe ich libs nicht gefunden. Was mache ich falsch oder was muss ich noch installieren, damit das laeuft? Danke schon mal! Hans-Georg
Hallo, On Fri, 28 Mar 2003, Hans-Georg Lerdo wrote:
Laut yast sind flex und yacc installiert. Auch kann ich 'flex test.lex" und "yacc test.y" ausfuehren ohne Meldungen zu bekommen. Die Ausgabedateien "lex.yy.c" und "y.yab.c" bekomme ich auch.
Wenn ich die durch den compiler jage (lex.yy.c ist mit "#include" in test.y drin:
gcc y.tab.c -ly -ll -o run
Also die flex-Lib heisst libfl, zu linken mit -lfl, eine liby kenne ich nicht. -dnh -- "If users are made to understand that the system administrator's job is to make computers run, and not to make them happy, they can, in fact, be made happy most of the time. If users are allowed to believe that the system administrator's job is to make them happy, they can, in fact, never be made happy." -- Paul Evans (as quoted by Barb Dijker, LISA'97)
On Friday 28 March 2003 12:55, David Haller wrote:
gcc y.tab.c -ly -ll -o run
Also die flex-Lib heisst libfl, zu linken mit -lfl, eine liby kenne ich nicht. Yep, habe ich auch hier gefunden und wird auch beim compilieren erkannt. Aber...
Hier ist der Auszug meines "Compilierversuchs": hg@Thinkpad:~/Documents/University/COP 6726/project/current> gcc lex.yy.o y.tab.c -lfl -o run lex.yy.o: In function `yylex': lex.yy.o(.text+0x46e): undefined reference to `yyerror' /tmp/ccH1E2Uo.o: In function `yyparse': /tmp/ccH1E2Uo.o(.text+0x189): undefined reference to `yyerror' /tmp/ccH1E2Uo.o(.text+0x3d1): undefined reference to `yyerror' collect2: ld returned 1 exit status hg@Thinkpad:~/Documents/University/COP 6726/project/current> Wenn ich DIESELBEN lex/yacc Dateien auf den Solaris System meiner Uni compilere (mit: "gcc lex.yy.o -ll -ly y.tab.c -o run"), geht das wunderbar und das Program laeuft auch richtig. Also nehme ich mal an, das die Files ok sind und nur die "compiliererei" hier hakt. Irgendeine Idee?? Danke schon mal Hans-Georg
Am Sam, 2003-03-29 um 03.00 schrieb Hans-Georg Lerdo:
On Friday 28 March 2003 12:55, David Haller wrote:
gcc y.tab.c -ly -ll -o run
Also die flex-Lib heisst libfl, zu linken mit -lfl, eine liby kenne ich nicht. Yep, habe ich auch hier gefunden und wird auch beim compilieren erkannt. Aber...
Hier ist der Auszug meines "Compilierversuchs":
hg@Thinkpad:~/Documents/University/COP 6726/project/current> gcc lex.yy.o y.tab.c -lfl -o run lex.yy.o: In function `yylex': lex.yy.o(.text+0x46e): undefined reference to `yyerror' /tmp/ccH1E2Uo.o: In function `yyparse': /tmp/ccH1E2Uo.o(.text+0x189): undefined reference to `yyerror' /tmp/ccH1E2Uo.o(.text+0x3d1): undefined reference to `yyerror' collect2: ld returned 1 exit status hg@Thinkpad:~/Documents/University/COP 6726/project/current>
Wenn ich DIESELBEN lex/yacc Dateien auf den Solaris System meiner Uni compilere (mit: "gcc lex.yy.o -ll -ly y.tab.c -o run"), geht das wunderbar und das Program laeuft auch richtig.
bison != yacc, flex != lex, Solaris != Linux Der Knackpunkt dürfte in deinem Fall bison vs. yacc sein, da Du unter Solaris entweder yacc und nicht bison verwendest, oder aber bison generierten Code mit Solaris/yacc's liby linkst. Aus info bison (Stichwort yyerror): The Bison parser expects to report the error by calling an error reporting function named `yyerror', which you must supply. It is called by `yyparse' whenever a syntax error is found, and it receives one argument. For a parse error, the string is normally `"parse error"'. [liby unter Solaris enthält im wesentlichen nur yyerror.]
Also nehme ich mal an, das die Files ok sind und nur die "compiliererei" hier hakt. Willkommen in der Welt der portablen Programmierung ;)
Irgendeine Idee??
Implementier yyerror innerhalb der *.y-Datei und vergiss liby. Ralf
On Friday 28 March 2003 22:30, Ralf Corsepius wrote:
bison != yacc, flex != lex, Solaris != Linux
Das weiss ich... ;-) Zugegeben, ich habe flex und lex gemischt benutzt und vielleicht dadurch fuer Verwirrung gesorgt... Gelobe Besserung... ;-) Schon fuer einige andere Dinge habe ich auf meinem 8.0 System Sachen fuer's Solaris System machen koennen. Nach Anpassung der make files hatte ich eigentlich kaum Probleme. Fuer das jetztige Projekt muss ich leider yacc und flex benutzten. Bison und Memphis und so scheiden LEIDER aus.
Der Knackpunkt dürfte in deinem Fall bison vs. yacc sein, da Du unter Solaris entweder yacc und nicht bison verwendest, oder aber bison generierten Code mit Solaris/yacc's liby linkst. Was meinst Du? Ich war der Meinung, das ich mit "yacc -d test.y" yacc-spezifischen Code erzeuge und bison hier ganz aussen vor ist (Stichwort "bison -y test.y"). Oder sind es "-ly" und "-ll", die die ganze Sache verursachen (Wuerde mich aber ueberraschen...)?
[liby unter Solaris enthält im wesentlichen nur yyerror.] Ich habe es mal mit einer eigenen yyerror probiert und bekomme dann alles auch compiliert. Nur bekomme ich keinen output bei einem Fehler... :-(
Willkommen in der Welt der portablen Programmierung ;) ;-)
Implementier yyerror innerhalb der *.y-Datei und vergiss liby. Siehe oben...
Anscheinend muss ich doch wieder rausfahren... Habe hier nur dial-up und will meine Nerven schonen... ;-) Bissetahge Hans-Georg
participants (3)
-
David Haller
-
Hans-Georg Lerdo
-
Ralf Corsepius