Ich versuche meine .spl
Datei in eine C Datei zu übersetzen (weil es keinen Compiler gibt). Ich habe ein Beispiel "Hello World" .spl-Datei, und ich habe die Shakespeare Programmiersprache .tar
heruntergeladen und extrahiert es, aber ich habe keine Ahnung, was ich als nächstes tun soll. Ich kann anscheinend keine Anweisungen in irgendeiner Dokumentation finden. Kann jemand helfen?
Bearbeiten:
Wenn ich make -f "Makefile"
eintippe, bekomme ich folgende Ausgabe:
Der Fehler:
ld: library not found for -lfl
bedeutet, dass Sie die Bibliothek, die Teil der flex-Bibliothek ist, nicht finden.
Um zu überprüfen, ob Sie bereits eine flexible Bibliothek installiert haben, können Sie mit locate:
darauf zugreifen %Vor%OSX
Wenn Sie es nicht haben, können Sie install flex installieren (wenn Sie Brauen verwenden):
%Vor%Wenn Sie weiterhin Probleme haben, können Sie versuchen, die folgenden Variablen während der Erstellung manuell zu übergeben, z. B .:
%Vor%oder:
%Vor% eventuell durch Ändern von DYLD_FALLBACK_LIBRARY_PATH
environment.
Sie können sehen, welche Umgebung übergeben wurde, indem Sie brew --env
ausführen.
Hinweis: Stellen Sie sicher, dass Sie die Pfade entsprechend Ihrer Umgebung ändern.
Verwandte:
Linux
Bei den meisten gängigen Linux-Distributionen können Sie es installieren:
%Vor%Verwandte:
Alternativ verwenden Sie Homebrew, um Shakespeare zu installieren:
%Vor%Welches sollte alle Ihre Abhängigkeiten erkennen.
Sie möchten die Datei "Makefile" mit dem Befehl make -f "Makefile"
ausführen, und wenn Sie die Befehle haben
%Code%
%Code%
%Code%
%Code%
%Code%
%Code%
in deinem Terminal sollte es dir gut gehen.
Sie können testen, ob Sie einen Befehl haben, indem Sie seinen Namen und dann ar
in Ihr Terminal eingeben.
Dann können Sie gcc
(das jetzt in Ihrem SPL-Ordner erschienen ist) mit Ihrem Code eine .c-Datei erstellen, die Sie dann in flex
mit spl.h einfügen können, um eine .o-Datei zu erstellen. die Sie schließlich mit libspl.a in ranlib
einfügen können, um ein endgültiges, kompiliertes Programm zu erstellen.
Nur für den Fall, legen Sie die Dateien in tar
wie folgt:
Erster Durchlauf: bison
Zweiter Durchlauf: --help
Sie können kommentieren, wenn Sie mehr Informationen wünschen, hoffentlich hilft (oder funktioniert sogar).
Wenn Sie einen Mac verwenden, enthält OSX offensichtlich nicht die notwendigen Bibliotheken für flex, und das verursacht den Fehler: library not found for -lfl
Es sollte jedoch ein äquivalenter Ersatz sein, den Sie verwenden können. Sie müssen nur eine Zeile im Makefile ändern. Sie sollten diese Zeile ändern:
%Vor%dazu:
%Vor%Nachdem Sie das getan haben, versuchen Sie, make erneut auszuführen und sehen Sie, ob Sie bessere Ergebnisse erzielen.
Das Problem ist, dass die Autoren beschlossen haben, ihr Programm mit der meist nutzlosen libfl-Bibliothek zu verknüpfen, die fast nie benötigt wird, also nicht in einigen Flex-Distributionen enthalten ist (insbesondere auf MacOS).
Es stellt sich heraus, dass libfl nur zwei Funktionen definiert hat - main
und yywrap
. Das main
in libfl wird so gut wie nie verwendet, und das yywrap
könnte auch nicht sein, weil es nur 1
zurückgibt.
Es stellt sich heraus, dass Sie den Code leicht genug reparieren können:
Bearbeiten Sie die Datei include/user_code_top.metaflex
und fügen Sie am Ende die Zeile %option noyywrap
hinzu.
editiere die Makefile
und entferne die -lfl
von der Verbindungslinie (suche einfach nach der Zeichenkette -lfl
und entferne diese 4 Zeichen wo immer sie erscheinen)
Nun sollten Sie in der Lage sein, es zu erstellen (obwohl Sie möglicherweise die Datei scanner.l
löschen müssen, wenn Sie zuvor make ausgeführt haben und den Fehler erhalten haben, da das Makefile nicht erkennt, dass es nach dem Bearbeiten der Metaflex-Datei neu erstellt werden muss ).
Eigentlich hatte ich das gleiche Problem auf OS X Yosemite.
%Vor%Lösung
Ich konnte das "Makefile" nach der Änderung machen:
%Vor%bis
%Vor%In der Zwischenzeit habe ich die Flex-Bibliothek installiert, aber ich bin mir nicht sicher, ob es geholfen hat oder nicht. Falls meine Lösung nicht ohne die Flex-Bibliothek funktioniert, können Sie sie einfach installieren mit:
%Vor% (So erhalten Sie das brew
: Ссылка )
Tags und Links dependencies bison flex-lexer compiler-construction compiler-errors