10
votes

Comment réparer une bibliothèque LD manquante pour -lfl lors de la compilation?

J'essaie de traduire mon fichier .spl code> dans un fichier C (car il n'y a pas de compilateur). J'ai un exemple de fichier "Hello World" .SPL, et j'ai téléchargé le Langue de programmation Shakespeare .tar code> et l'extrait, mais je ne sais pas quoi faire ensuite. Je ne peux pas sembler trouver des instructions dans aucune documentation. Peut-on aider?

Edit: p>

Lorsque je tape make -f "Makefile" code>, je reçois la sortie suivante: p>

bison --verbose -d grammar.y
gcc -O2 -Wall -c grammar.tab.c
gcc -O2 -Wall -c makescanner.c
gcc makescanner.o -O2 -Wall -o makescanner
./makescanner include > scanner.l
flex -Cem -t scanner.l > scanner.c
scanner.l:600: warning, rule cannot be matched
gcc -O2 -Wall -c scanner.c
<stdout>:5823: warning: ‘yyunput’ defined but not used
gcc -O2 -Wall -c strutils.c
gcc grammar.tab.o scanner.o strutils.o -O2 -Wall -lfl -o spl2c
ld: library not found for -lfl
collect2: ld returned 1 exit status
make: *** [spl2c] Error 1


0 commentaires

5 Réponses :


1
votes

Vous souhaitez exécuter le fichier appelé "Makefile" avec la commande make -f "Makefile" , et si vous avez les commandes ar gcc flex ranlib goudron bison Dans votre terminal, ça devrait aller.
Vous pouvez tester si vous avez une commande en tapant son nom, puis - Aide dans votre terminal.

alors vous pouvez utiliser spl2c (qui est apparu maintenant dans votre dossier SPL) avec votre code pour créer un fichier .C, que vous pouvez ensuite placer dans gcc avec Spl.h va faire un fichier .o, lequel vous pouvez enfin mettre dans gcc avec libspl.a pour créer un programme final, compilé.

Juste au cas où, mettez les fichiers dans gcc comme ceci:
PREMIER PASS: PROGRAMME DE GCC.C SPL.H -O PROGRAMME.O
Second Pass: GCC PROGRAMNAME.O LIBSPL.A -O COMPOREDPROGRAMNOME

Vous pouvez commenter si vous voulez plus d'informations, j'espère que cela aide (ou même fonctionne).


3 commentaires

Voir Modifier dans l'article d'origine s'il vous plaît. La ligne de fond est lorsque je tape SL2C après avoir exécuté le make -f "Makefile" I Obtenir une erreur "Commande introuvable".


@Skyler -lfl signifie libfl. * . Êtes-vous sûr que vous avez lex (comme dans gnu flex) installé? Si vous faites, peut-être réinstaller cela aiderait? Ou Redownload libfl. * ? Vous pouvez rechercher libfl-dev pour le trouver. Ou juste Redownload Lex .


D'ACCORD. J'ai SPL2C de travailler. Après avoir couru ./spl2x bonjour.c, i gcc.c, je reçois "erreur fatale: spl.h: aucun fichier ou répertoire de ce type". J'ai essayé de changer la déclaration #include à #include "spl.h", mais j'ai ensuite plusieurs erreurs telles que "une référence non définie à" global_initialize "", et "Indiffinefin en référence à" initialize_character "". Des idées?



1
votes

Si vous utilisez un Mac, apparemment OSX n'inclut pas les bibliothèques nécessaires pour Flex, et c'est ce qui est à l'origine de l'erreur: Bibliothèque non trouvée pour -lfl

Toutefois, Il est censé être un remplacement équivalent que vous pouvez utiliser, vous aurez juste besoin de changer une ligne dans le maquillage. Vous devriez changer cette ligne: xxx

à ceci: xxx

après cela, essayez de faire de la marche et de voir si Vous obtenez de meilleurs résultats.


1 commentaires

Voir mon dernier commentaire à la réponse ci-dessus, vous pouvez peut-être vous aider? Merci



5
votes

L'erreur:

ld: bibliothèque introuvable pour -lfl code> p> BlockQuote>

signifie que vous avez manqué la bibliothèque qui fait partie de Bibliothèque Flex . p>

Pour vérifier si vous avez déjà FLEX Bibliothèque installée, vous pouvez le rechercher à l'aide de localiser: p> xxx pré>

osx strong> p>

Si vous ne l'avez pas, vous pouvez installer INSTALL FLEX (si vous utilisez Brew ): p> xxx pré>

Si vous rencontrez toujours les problèmes, vous pouvez essayer de transmettre les variables suivantes manuellement pendant la fabrication, par exemple: p>

brew install shakespeare -v


0 commentaires

0
votes

En réalité, j'ai eu le même problème sur OS X Yosemite.

brew install flex


0 commentaires

0
votes

Le problème est que les auteurs ont décidé de relier leur programme par rapport à la bibliothèque de libber la plus inutile, qui n'est presque jamais nécessaire, donc non inclus dans certaines distributions Flex (en particulier, celui sur MacOS).

Il s'avère que libfl n'a que deux fonctions définies dans IT - principal et yywrap . Le principal dans la liblfl est à peu près jamais utilisé, et le yywrap peut-on aussi bien, car tout ce qu'il fait est renvoyer 1 .

Il s'avère que vous pouvez corriger le code assez facilement:

  1. Modifier le fichier Inclure / user_code_top.metaflex et ajoutez la ligne % option noyywrap à la fin.

  2. Modifier le Makefile et supprimer le -LFL de la ligne de liaison (juste chercher la chaîne -Lfl et supprimez ces 4 caractères où qu'ils apparaissent)

    Maintenant, vous devriez être capable de le construire (bien que vous deviez peut-être supprimer le fichier scanner.l si vous avez précédemment manqué de faire et obtenez l'échec, car le fabricant ne parvient pas à détecter que nécessaire être reconstruit après avoir édité le fichier Metaflex).


0 commentaires