2009-11-18 13 views
2

Sur mon ordinateur (Windows exécutant cygwin) il compile correctement. Flex est la version 2.5.35 et bison est la version 2.3Pourquoi mon compilateur flex/yacc ne compile pas correctement sur une autre machine linux

Sur la machine Linux 1, elle se compile correctement. Flex est la version 2.5.4 et bison est la version 1.875c.

Sur la machine Linux 2, elle n'est pas compilée correctement. Flex est la version 2.5.4 et bison est 2.3.

En regardant les numéros de version de flex/bison, on peut s'attendre à ce que, compilé correctement sur ma machine, il compile correctement sur la machine 2, mais ce n'est pas le cas.

Sur la machine linux 2, quand je lance y.tab.c gcc -c Je reçois les avertissements suivants à plusieurs reprises

avertissement: déclaration implicite de la fonction intégrée « printf »

Et quand Je lance ce qui suit

gcc -o cminus y.tab.o lex.yy.o ly -lfl

Je reçois l'erreur suivante.

gcc -o cminus y.tab.o lex.yy.o -ly -lfl 
/usr/bin/ld: cannot find -ly 
collect2: ld returned 1 exit status 
make: *** [cminus] Error 1 

Cette erreur peut être retirée en prenant l'option ly dans gcc pour que le programme compile, mais le programme compilé ne fonctionne pas correctement comme il le fait sur ma machine et l'autre machine Linux.

Quel pourrait être le problème?

Répondre

3
/usr/bin/ld: cannot find -ly 

est le message que vous obtenez lorsque l'éditeur de liens ne trouve pas la bibliothèque. Vous devez localiser liby.a ou liby.so, puis insérer un -L<that path> dans votre ligne de commande gcc.

Sur mon Cygwin installer, il est situé dans /lib/liby.a donc j'utiliser quelque chose comme:

gcc -o cminus y.tab.o lex.yy.o -L /lib -ly -lfl 
0

L'avertissement semble que vous avez un manque « #include » dans certains fichier source. L'erreur de lien signifie que liby.a n'est pas installé sur votre machine. liby fait partie de yacc et de quelques versions de bison, mais est rarement nécessaire (il ne fait que définir les implémentations par défaut de yyerror et quelques autres choses). Le fait que ce soit lié sans cela signifie que vous n'en avez pas vraiment besoin.

Vous ne dites pas de quelle façon la progrma lorsque son inconduite notoire ne fonctionne pas correctement, de sorte que le diagnostic est difficile à

+0

Le #include manquant est pour quark

+0

Oui, pour une raison quelconque stackoverflow ne montre pas le en les citations dans ma réponse –