2009-11-18 67 views
2

在我的機器上(運行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機器上編譯的程序無法正常工作。

什麼可能導致問題?

回答

3
/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 
0

警告聽起來像你有一些源文件丟失「的#include」。鏈接錯誤意味着你沒有在你的機器上安裝liby.a。 liby是yacc和bison某些版本的一部分,但很少真正需要(它只是定義yyerror和其他一些東西的默認實現)。沒有它的事實表明你並不需要它。

您不要在progrma行爲不端什麼樣的方式,當它不能正常工作,所以這是很難診斷

+0

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

+0

是啊,出於某種原因計算器不顯示在說在我的答案中引用 – 2009-11-23 05:35:10

相關問題