Wie behebe ich eine fehlende ld-Bibliothek für -lfl beim Kompilieren?

9

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:

%Vor%     
Skyler 17.04.2013, 02:23
quelle

5 Antworten

3

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:

OS X (Homebrew)

Alternativ verwenden Sie Homebrew, um Shakespeare zu installieren:

%Vor%

Welches sollte alle Ihre Abhängigkeiten erkennen.

    
kenorb 29.11.2013 11:07
quelle
1

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).

    
jobatabs 17.04.2013 12:18
quelle
1

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.

    
James Holderness 04.05.2013 03:01
quelle
0

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:

  1. Bearbeiten Sie die Datei include/user_code_top.metaflex und fügen Sie am Ende die Zeile %option noyywrap hinzu.

  2. 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 ).

    
Chris Dodd 12.04.2015 06:25
quelle
0

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 : Ссылка )

    
Mateusz Piotrowski 11.04.2015 23:11
quelle