• [rcssbase] CentOS 4.4 x86_64 でのビルドエラー修正. (akiyama) 18:10:34

boost::filesystem へのリンクがうまくいかなかったので,$BOOST_FILESYSTEM_LIB を configure.ac から 各Makefile.am へと移した. 具体的には以下の通り.

Index: configure.ac
===================================================================
RCS file: /cvsroot/sserver/rcsoccersim/rcssbase/configure.ac,v
retrieving revision 1.31
diff -r1.31 configure.ac
53c53
< LDFLAGS="$LDFLAGS $BOOST_FILESYSTEM_LIB $BOOST_LDFLAGS"
---
> LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
Index: rcssbase/conf/Makefile.am
===================================================================
RCS file: /cvsroot/sserver/rcsoccersim/rcssbase/rcssbase/conf/Makefile.am,v
retrieving revision 1.16
diff -r1.16 Makefile.am
39c39
< buildertest_LDADD = @TEST_LIBS@ librcssconfparser.la
---
> buildertest_LDADD = @TEST_LIBS@ librcssconfparser.la $(BOOST_FILESYSTEM_LIB)
42c42
< parsertest_LDADD = @TEST_LIBS@ librcssconfparser.la
---
> parsertest_LDADD = @TEST_LIBS@ librcssconfparser.la $(BOOST_FILESYSTEM_LIB)
Index: rcssbase/lib/Makefile.am
===================================================================
RCS file: /cvsroot/sserver/rcsoccersim/rcssbase/rcssbase/lib/Makefile.am,v
retrieving revision 1.11
diff -r1.11 Makefile.am
66c66
< 
---
> rcsslibimporter_LDADD = $(BOOST_FILESYSTEM_LIB)
70c70
< rcssmodtest_LDADD = librcsslib.la
---
> rcssmodtest_LDADD = librcsslib.la $(BOOST_FILESYSTEM_LIB)
  • [rcssbase] リファレンスへのリファレンス問題.(akiyama) 18:10:34

CentOS 4.4 で出る怪しげな警告メッセージを追跡.

make[3]: Entering directory `/home/akiyama/soccer/sserver-cvs/rcsoccersim/rcssbase/rcssbase/conf'
if /bin/sh ../../libtool --mode=compile --tag=CXX g++ -DHAVE_CONFIG_H
-I. -I. -I../..	-I/usr/include -W -Wall -I../.. -g -O2 -MT parser.lo -MD -MP -MF ".deps/parser.Tpo" -c -o parser.lo parser.cpp; \
then mv -f ".deps/parser.Tpo" ".deps/parser.Plo"; else rm -f ".deps/parser.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I/usr/include -W -Wall -I../.. -g -O2 -MT parser.lo
-MD -MP -MF .deps/parser.Tpo -c parser.cpp  -fPIC -DPIC -o .libs/parser.o
/usr/include/boost/spirit/error_handling/exceptions.hpp: In copy constructor 
`boost::spirit::parser_error<ErrorDescrT, IteratorT>::parser_error(const boost::spirit::parser_error<ErrorDescrT,
IteratorT>&) [with ErrorDescrT = rcss::conf::Parser::Errors, IteratorT = const char*]':
/usr/include/boost/throw_exception.hpp:39:   instantiated from `void boost::throw_exception(const E&) [with E =
boost::spirit::parser_error<rcss::conf::Parser::Errors, const char*>]'
/usr/include/boost/spirit/error_handling/impl/exceptions.ipp:54:   instantiated from  `RT
boost::spirit::impl::fallback_parser_parse(const ParserT&, const ScannerT&) [with 
RT = boost::spirit::match<boost::spirit::nil_t>, ParserT = boost::spirit::fallback_parser<rcss::conf::Parser::Errors,
boost::spirit::kleene_star<boost::spirit::rule<boost::spirit::nil_t, boost::spirit::nil_t, boost::spirit::nil_t> >,
boost::_bi::bind_t<boost::spirit::error_status<boost::spirit::nil_t>, boost::spirit::error_status<boost::spirit::nil_t>
(*)(const rcss::conf::Parser*, const boost::spirit::scanner<const char*,
boost::spirit::scanner_policies<boost::spirit::iteration_policy, boost::spirit::match_policy,
boost::spirit::action_policy> >&, const boost::spirit::parser_error<rcss::conf::Parser::Errors, const char*>&),
boost::_bi::list3<boost::_bi::value<rcss::conf::Parser*>, boost::arg<1>, boost::arg<2> > > >, ScannerT =
boost::spirit::scanner<const char*, boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >]'
/usr/include/boost/spirit/error_handling/exceptions.hpp:281:   instantiated from `typename
boost::spirit::parser_result<boost::spirit::fallback_parser<ErrorDescrT, ParserT, HandlerT>, ScannerT>::type
boost::spirit::fallback_parser<ErrorDescrT, ParserT, HandlerT>::parse(const ScannerT&) const [with ScannerT =
boost::spirit::scanner<const char*, boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >, ErrorDescrT = rcss::conf::Parser::Errors, ParserT =
boost::spirit::kleene_star<boost::spirit::rule<boost::spirit::nil_t, boost::spirit::nil_t, boost::spirit::nil_t> >,
HandlerT = boost::_bi::bind_t<boost::spirit::error_status<boost::spirit::nil_t>,
boost::spirit::error_status<boost::spirit::nil_t> (*)(const rcss::conf::Parser*, const boost::spirit::scanner<const
char*, boost::spirit::scanner_policies<boost::spirit::iteration_policy, boost::spirit::match_policy,
boost::spirit::action_policy> >&, const boost::spirit::parser_error<rcss::conf::Parser::Errors, const char*>&),
boost::_bi::list3<boost::_bi::value<rcss::conf::Parser*>, boost::arg<1>, boost::arg<2> > >]'
/usr/include/boost/spirit/core/non_terminal/impl/rule.ipp:233:   instantiated from `typename
boost::spirit::match_result<ScannerT, ContextResultT>::type boost::spirit::impl::concrete_parser<ParserT, ScannerT,
AttrT>::do_parse_virtual(const ScannerT&) const [with ParserT =
boost::spirit::fallback_parser<rcss::conf::Parser::Errors,
boost::spirit::kleene_star<boost::spirit::rule<boost::spirit::nil_t, boost::spirit::nil_t, boost::spirit::nil_t> >,
boost::_bi::bind_t<boost::spirit::error_status<boost::spirit::nil_t>, boost::spirit::error_status<boost::spirit::nil_t>
(*)(const rcss::conf::Parser*, const boost::spirit::scanner<const char*,
boost::spirit::scanner_policies<boost::spirit::iteration_policy, boost::spirit::match_policy,
boost::spirit::action_policy> >&, const boost::spirit::parser_error<rcss::conf::Parser::Errors, const char*>&),
boost::_bi::list3<boost::_bi::value<rcss::conf::Parser*>, boost::arg<1>, boost::arg<2> > > >, ScannerT =
boost::spirit::scanner<const char*, boost::spirit::scanner_policies<boost::spirit::iteration_policy,
boost::spirit::match_policy, boost::spirit::action_policy> >, AttrT = boost::spirit::nil_t]'
parser.cpp:848:   instantiated from here
/usr/include/boost/spirit/error_handling/exceptions.hpp:73: warning: base class `class
boost::spirit::parser_error_base' should be explicitly initialized in the copy constructor
/bin/sh ../../libtool --mode=link --tag=CXX g++ -W -Wall -I../.. -g -O2  -L/usr/lib -o librcssconfparser.la -rpath
/home/akiyama/rcss/lib -version-info 1:0:0  parser.lo builder.lo statushandler.lo streamstatushandler.lo ../lib/
librcsslib.la 
rm -fr  .libs/librcssconfparser.la .libs/librcssconfparser.lai .libs/librcssconfparser.so .libs/
librcssconfparser.so.1 .libs/librcssconfparser.so.1.0.0

長いが,要するにリファレンスのリファレンス問題のようだ. さて,どうすればいいのか. boost::bindは既に使われているんだけど…

  • [rcssbase][librcsc] 64bit compatibility (akiyama) 18:33:42

x86_64環境で以下のような警告メッセージが出力される.

/usr/bin/ld: skipping incompatible /usr/lib/../lib/libz.so when searching for -lz

どうやら,64ビットライブラリである /usr/lib64 と, 32ビット互換ライブラリである /usr/lib とのふたつのライブラリが存在していて,サーチパスは /usr/lib を優先してしまうようだ. 以下のようにすると,警告は出なくなる.

$ ./configure LDFLAGS="-L/lib64 -L/usr/lib64"

しかし,この程度のことは自動化できそうなもんなんだが…. autoconf の マクロで何か無いのかな.

  • [rcssserver] CentOS 4.4 x86_64 でのconfigureエラー修正. (akiyama) 20:08:32

AC_CHECK_LIB で librcsslib と librcssconfparser が見付からなくなってしまった. 試行錯誤の結果,これらは boost::filesystem を使用しているために,configure時にboostのライブラリへのパスが設定できていないからではないかという結論に達した. そこで,configure.ac の boost チェックマクロを AC_CHECK_LIBの前に持ってきて,LIBSに $BOOST_FILESYSTEM_LIB を代入してやると,無事configureが通るようになった.

やれやれ.

  • [soccerwindow2] パッケージから漏れていたファイルを追加. (akiyama) 21:12:22

RoboCupPortage用のebuildファイルを作っていて,soccerwindow2-2.0.0 の wx版fedit に必要なヘッダファイルがひとつ抜けていることに気が付いた. 早速ブランチを作って,修正して,タグを作って,トランクにマージして,sourceforge.jpにてリリース.

ブランチからのマージ方法を毎回忘れるので,メモがわりに今回実行したコマンドを記す.

$ cd trunk/soccerwindow2
  // 内容確認
$ svn diff -r 282:285 https://svn...../repos/rctools/branches/soccerwindow2-2.0.x
  // 内容確認 その2. 状態フラグが表示されるだけで,ファイルには変更が加えられない
$ svn merge --dry-run -r 282:285 https://svn...../repos/rctools/branches/soccerwindow2-2.0.x
  // 実行
$ svn merge -r 282:285 https://svn...../repos/rctools/branches/soccerwindow2-2.0.x
  • [librcsc][soccerwindow2] RoboCupPortageに追加. (akiyama) 21:19:08

librcsc-1.3.0, soccerwindow2-2.0.[01] をRoboCupPortageに追加した. 折角,Qt3, Qt4, wxGTKとサポートしているので,USEフラグを3つ用意してみた.

  • [rcssserver] flexの互換性問題. (akiyama) 21:52:10

CentOS 4.4 には flex-2.4a がインストールされているために,CVS HEADのrcssbaseに含まれるFlexLexer.h とは互換性が無い. このままでは,flexが自動生成したソースコードのコンパイルが通らないので,#include <rcssbase/FlexLexer.h> を #include <FlexLexer.h> に変更することで対処.

しかし,パッケージ配布する際には自動生成ファイルも同梱されるため,rcssbaseにはリリースパッケージを最終的に作る環境にある FlexLexer.h を同梱しなければならない. つまり,ビルドできるかどうかのテストが終わったら,#include <rcssbase/FlexLexer.h> に戻さなければならないということ.

やーっと,CentOS 4.4 x86_64 な環境でrcssserverが動いた, 後は,ライブラリのサーチパスの問題さえ解消できれば,64ビット環境のサポートは完了かな.


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