在我的机器上(运行cygwin的Windows),它正确编译。 Flex版本为2.5.35,野牛版本为2.3
在linux机器1上,它正确编译。 Flex是版本2.5.4,野牛版本是1.875c。
在linux机器2上,它无法正确编译。 Flex是版本2.5.4,野牛是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机器上一样。
可能导致问题的原因是什么?
答案 0 :(得分:3)
/usr/bin/ld: cannot find -ly
是链接器找不到库时收到的消息。
您需要找到liby.a或liby.so,然后在-L<that path>
命令行中插入gcc
。
在我的Cygwin安装中,它位于/lib/liby.a
,所以我会使用类似的东西:
gcc -o cminus y.tab.o lex.yy.o -L /lib -ly -lfl
答案 1 :(得分:0)
警告听起来好像你在某个源文件中缺少'#include'。链接错误意味着您的计算机上没有安装liby.a. liby是yacc和bison的一些版本的一部分,但实际上很少需要它(它只定义了yyerror和其他一些东西的默认实现)。它没有它的链接这一事实意味着你并不真正需要它。
当没有正确运作时,你没有说过程序员行为不当,所以很难诊断