[Flex] mehrere Scanner in ein Programm linken

mueslirocker

Mitglied
Hi,

ich bin wiedermal auf ein Problem gestoßen.
Ich habe nun mehrere Programme mit Flex geschrieben, die alle nicht selbst (also allein) lauffähig sind. Sie werden von einem anderen Hauptprogramm nacheinander auf einen String angesetzt und liefern jeweils den veränderten String zurück.
Eigentlich möchte ich die Scanner alle in eine dll linken und diese dann von meinem Hauptprogramm aus einbinden.

Mein Problem ist nun, dass man scheinbar nicht mehrere Quellcodes, die mit Flex generiert wurden, zusammen linken kann.
Die Objektdateien erzeuge ich noch getrennt von einander und das klappt auch, aber wenn ich dann ans Linken gehe, kommen haufenweise Fehlermeldungen.

multiple definition of `yylex()'
multiple definition of `yy_switch_to_buffer(yy_buffer_state*)
multiple definition of `yy_delete_buffer(yy_buffer_state*)'
...
usw.

Ich würde ja ein einfaches
#ifndef X
#define X
...
#endif
drum 'rum baun, aber der Quellcode wird ja generiert und ich kann ja nicht alles ausklammern, da beide Programm(teil)e noch laufen sollen.

Ich könnte zur Not mehrere DLLs bauen, aber darauf möchte ich nur sehr ungern zurück greifen müssen.

Vielleicht ist noch von Interesse:
In der DLL befindet sich ebenfalls eine Schnittstelle, die alle Lex-Programme per #include einbindet und später halt alle Aufrufe nach einander tätigt. Man kann die Programme aber auch einzeln direkt aufrufen.
Diese Schnittstelle lässt sich auch normal kompilieren, was mich ein wenig wundert, da die Programme da ja schon alle "zusammengeführt" werden.

Weiß jemand, wie ich das Problem lösen oder einfach umgehen kann?
 
Dazu ist die -P<prefix> Option bei flex gedacht:

ändert den Standard-Präfix für alle globalen Variablen und Funktionen von "yy" in <prefix>, so dass man leicht verschiedene Flex Programme zusammenlinken kann.

:google: 'man flex'
 
Zurück