为什么我的flex/yacc编译器不能在另一台linux机器上正确编译

问题描述:

在我的机器上(运行cygwin的Windows)它编译正确。 Flex是版本2.5.35,野牛是版本2.3为什么我的flex/yacc编译器不能在另一台linux机器上正确编译

在linux机器1上它编译正确。 Flex是2.5.4版本,bison是1.875c版本。

在linux机器2上它编译不正确。 Flex是2.5.4版本,bison是2.3。

通过查看flex/bison版本号可以预期,如果它在我的机器上正确编译,它将在机器2上正确编译,但事实并非如此。

Linux计算机2,当我运行gcc -c y.tab.c的,我得到以下警告几次

警告:内建函数“printf的”不兼容的隐式声明

当我运行下面的

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

我碰到下面的错误。

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 

这个错误可以通过取出在GCC的-ly选项,这样的程序编译被删除,但它确实我的机器和其他Linux机器上编译的程序无法正常工作。

什么可能导致问题?

/usr/bin/ld: cannot find -ly 

是当链接器无法找到库时收到的消息。

您需要找到liby.a或liby.so,然后在您的gcc命令行中插入-L<that path>

在我的Cygwin的安装,它位于/lib/liby.a,所以我将使用类似:

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

警告听起来像你有一些源文件丢失“的#include”。链接错误意味着你没有在你的机器上安装liby.a。 liby是yacc和bison某些版本的一部分,但很少真正需要(它只是定义yyerror和其他一些东西的默认实现)。没有它的事实表明你并不需要它。

您不要在progrma行为不端什么样的方式,当它不能正常工作,所以这是很难诊断

+0

缺少的#include是 quark 2009-11-22 20:55:32

+0

是啊,出于某种原因计算器不显示在说在我的答案中引用 – 2009-11-23 05:35:10