• [rcssserver] flex互換性問題 (akiyama) 12:52:55

flexのバージョン間の互換性の無さのせいで,またハマり中. 配布パッケージをコンパイルするだけなら問題無いのだが,自分でbootstrapから行う場合に問題大有り.

2.5.33 と 2.5.34 でまたインタフェースが変わったらしい. 2.5.33に変わるときも同様の問題に遭遇したので.またかという感想. http://flex.sourceforge.net/ の履歴を見ると,2.5.34は2007年12月のリリース.問題がようやく顕在化してきた訳だ.

rcssbaseに含まれるFlexLexer.hを修正すれば通るようになるのは分かっているが,様々な環境で開発することを考えると苦しい.変更内容は関数の宣言を一つ増やすだけなんだけど,どうするのがスマートな解決策なんだろう. マクロで無理矢理分岐してしまうのが楽かな….

  • [rcssbase] flex-2.5.34対応 (akiyama) 14:06:43

対応が必要なのは,int yywrap()関数の宣言のみ. 他にも細かい変更点はあるが,コンパイラが吸収してくれる範囲なので無視できるはず. flexのバージョンは,flexが生成するソースファイル内でdefineされている. そこで,flex-2.5.34のFlexLexer.hをベースに,以下のようにflexのバージョンに応じてプリプロセッサで分岐するようにしたら上手くいった.

#if ((YY_FLEX_MAJOR_VERSION == 2) && (YY_FLEX_MINOR_VERSION == 5) \
       && (YY_FLEX_SUBMINOR_VERSION >= 34))
   RCSSBASE_API
   virtual int yywrap();
#endif

まあ,これでいいだろ.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (2042d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.