[[diary/Kojima]]

・bison and flex

Plamo-4.5 な環境の bison は 2.3a,flex は 2.5.34 というバージョンになっ
ているのだけど,このバージョンだと libIDL-0.8.9(10) が正しくコンパイル
できない模様.

 kojima@athlon64[~/libIDL-0.8.9]% make
 bison -y -d -v 2>/dev/null ./parser.y
 make: *** [stamp-parser] エラー 1

これだけではよく分からないので,/dev/null へのエラーリダイレクトを
やめると,こんな感じのエラーになっている.

  kojima@athlon64[~/libIDL-0.8.9]% bison -y -d -v ./parser.y
 ./parser.y:610.9-10: $$ for the midrule at $6 of `struct_type' has no declared type
 ./parser.y:606.25-618.1: warning: unused value: $3
 ./parser.y:627.9-10: $$ for the midrule at $10 of `union_type' has no declared type
 ./parser.y:621.25-635.1: warning: unused value: $3
 ./parser.y:716.25-732.1: warning: unused value: $4
 ./parser.y:780.25-781.68: warning: unused value: $1
 ./parser.y:811.25-818.1: warning: unused value: $3
 ./parser.y:926.25-933.1: warning: unused value: $3

bison の文法なんて知らないぞ,,としばらく悩んだのだけど,Plamo-4.22 の
環境なら問題なくビルドできるので,bison を古い 2.0 にしてやると問題なく
通った.

 kojima@athlon64[~/libIDL-0.8.9]% bison -y -d -v ./parser.y
 conflicts: 23 shift/reduce, 3 reduce/reduce

それで最後まで行けるのかな,と思ったら,今度はリンクの段階で

 /bin/sh ./libtool --mode=link gcc  -g -O2   -o tstidl  tstidl.o libIDL-2.la -lglib-2.0   
 gcc -g -O2 -o .libs/tstidl tstidl.o  ./.libs/libIDL-2.so /usr/lib/libglib-2.0.so 
 ./.libs/libIDL-2.so: undefined reference to `__IDL_cur_token_line'
 ./.libs/libIDL-2.so: undefined reference to `__IDL_lex_cleanup'
 ./.libs/libIDL-2.so: undefined reference to `__IDL_prev_token_line'
 ./.libs/libIDL-2.so: undefined reference to `__IDL_lex'
 ./.libs/libIDL-2.so: undefined reference to `__IDL_in'
 ./.libs/libIDL-2.so: undefined reference to `__IDL_lex_init'
 collect2: ld returned 1 exit status
 make[2]: *** [tstidl] エラー 1
 make[2]: ディレクトリ `/home/kojima/libIDL-0.8.9' から出ます

などと言うエラーが発生.これもちゃんと動いている Plamo-4.22 環境と比較
したところ,lexer.c が正しく生成されていないことに気づき,Makefile を調
べたら,lexer.c は flex で lexer.l から生成されているので,どうやら
flex が怪しいことに.

 kojima@athlon64[~/libIDL-0.8.9]% make lexer.c
 flex -8 -t ./lexer.l | sed -e 's/yy/__IDL_/g' >lexer.c
 ./lexer.l:116: bad character: %
 ./lexer.l:116: unknown error processing section 1
 ./lexer.l:116: unknown error processing section 1
 ./lexer.l:116: bad character: 5
 ./lexer.l:116: bad character: 0
 ./lexer.l:116: bad character: 0
 ./lexer.l:116: bad character: 0

こちらも Plamo-4.22 の flex-2.5.4 に下げると,正しい lexer.c が生成でき,
リンクの参照も正しく行なわれるようになった.

 kojima@athlon64[~/libIDL-0.8.9]% rm lexer.c
 kojima@athlon64[~/libIDL-0.8.9]% make lexer.c
 flex -8 -t ./lexer.l | sed -e 's/yy/__IDL_/g' >lexer.c
 kojima@athlon64[~/libIDL-0.8.9]% make
 make  all-recursive
 make[1]: ディレクトリ `/home/kojima/libIDL-0.8.9' に入ります
 ...
 /bin/sh ./libtool --mode=link gcc  -g -O2   -o libIDL-2.la -rpath /usr/local/lib -version-info 0:0:0 -lglib-2.0   -no-undefined parser.lo lexer.lo ns.lo util.lo  
 rm -fr  .libs/libIDL-2.a .libs/libIDL-2.la .libs/libIDL-2.lai .libs/libIDL-2.so .libs/libIDL-2.so.0 .libs/libIDL-2.so.0.0.0
 gcc -shared  .libs/parser.o .libs/lexer.o .libs/ns.o .libs/util.o  /usr/lib/libglib-2.0.so  -Wl,-soname -Wl,libIDL-2.so.0 -o .libs/libIDL-2.so.0.0.0
 (cd .libs && rm -f libIDL-2.so.0 && ln -s libIDL-2.so.0.0.0 libIDL-2.so.0)
 (cd .libs && rm -f libIDL-2.so && ln -s libIDL-2.so.0.0.0 libIDL-2.so)
 ar cru .libs/libIDL-2.a  parser.o lexer.o ns.o util.o
 ranlib .libs/libIDL-2.a
 creating libIDL-2.la
 (cd .libs && rm -f libIDL-2.la && ln -s ../libIDL-2.la libIDL-2.la)
 /bin/sh ./libtool --mode=link gcc  -g -O2   -o tstidl  tstidl.o libIDL-2.la -lglib-2.0   
 gcc -g -O2 -o .libs/tstidl tstidl.o  ./.libs/libIDL-2.so /usr/lib/libglib-2.0.so 
 creating tstidl
 make[2]: ディレクトリ `/home/kojima/libIDL-0.8.9' から出ます

結論としては,bison,flex の新しいのに libIDL の文法記述が対応していな
い,ということになるのだろうけど,確かに lexer.l とかを見ると最終更新が
2003/05/09 だから,かなり古い感じ.このあたり,必ずしも新しいものがいい
わけではないことはバザールモデルの世界で要注意なところだろうな .
-脊髄反射的にFedoraを見に行ってしまう。現在qvbannerの暴走をなんとかセグメンテーション違反にまでもちこんだところ。 -- [[名倉]] &new{2008-02-18 (月) 14:54:28};
-たしかにlibIDL-0.8.10も同様でしたがなんとなく動きがおかしい感じだったのでちょうど有ったlibIDL-0.6.8をコンパイルしてみたらあっさり通りました。新しいflex,bisonのせいかな? -- [[名倉]] &new{2008-02-18 (月) 13:56:10};
-lfs構築中に同じエラーでハマりましたが、flex 2.5.35にupdateしたらすんなり通りました。 --  &new{2008-04-10 (木) 21:01:08};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS