編集メニュー > 新規作成 編集 コピー 名前の変更 アップロード 添付ファイル一覧 バックアップ

* anapaw install [#n9980707]
sunday実験のanapawをインストールしてみる。
本体をコンパイルすると
expat.hが無いと言われる。expat自体はあるが、ヘッダーファイルとか無いので、
 yum install expat-devel
でインストール。
もう一度makelibすると
 TArtDecoderTimeStamp.cc: In member function `virtual int  TArtDecoderTimeStamp::Decode(unsigned char*&, const unsigned int&,  TArtMap<TArtMap<int> >&, TArtMapConfig*)':
 TArtDecoderTimeStamp.cc:38: error: integer constant is too large for "long"  type
 make: *** [TArtDecoderTimeStamp.o] エラー 1
 make: ディレクトリ `/home/kondo/exp/sunday/anapaw/src' から出ます
 make: ディレクトリ `/home/kondo/exp/sunday/anapaw/src' に入ります
 g77 -O0 -fbounds-check -fno-f2c -funroll-loops -D_FILE_OFFSET_BITS=64  -D_LARGEFILE_SOURCE -DBABIRL -c anapaw.f 
 g++34 -O0  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DBABIRL  -D__OUTPUT_ROOTFILE__ -pthread -m32 -I/usr/local/src/root/root/include   -c -o  TArtDecoderTimeStamp.o TArtDecoderTimeStamp.cc
 TArtDecoderTimeStamp.cc: In member function `virtual int  TArtDecoderTimeStamp::Decode(unsigned char*&, const unsigned int&,  TArtMap<TArtMap<int> >&, TArtMapConfig*)':
 TArtDecoderTimeStamp.cc:38: error: integer constant is too large for "long" type
 make: *** [TArtDecoderTimeStamp.o] エラー 1
 make: ディレクトリ `/home/kondo/exp/sunday/anapaw/src' から出ます

と言われる。タイムスタンプは使っていないので、とりあえずnouseというディレクトリを作って放り込んで、TArtDecoderFactory.ccの中のTimeStampの部分をコメント。んでもう一度makelib。
 TPidDataDict.h
でG__ci.hが見つけられないと言われる。
 #include "G__ci.h"
を
 #include <G__ci.h>
に変更。OK。

次にmakeanaすると
 /usr/bin/ld: cannot find -ltermcap
と言われる。makefileの-ltermcapをなくす。再トライ。
 /usr/local/src/root/root/lib/libCint.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore(int)@GLIBCXX_3.4.5'
 /usr/local/src/root/root/lib/libCint.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()@GLIBCXX_3.4.5'

と言われる。うーむ、どういうこと?rootを最新版にしてみるか?
(現在version5.27/02)

root v5.28.00を入れた後でmakelibすると

 TDaliDataDict.cc:193: error: prototype for 'void TDaliData::ShowMembers(TMemberInspector&, char*)' does not match any in class 'TDaliData'
 TDaliData.h:39: error: candidate is: virtual void TDaliData::ShowMembers(TMemberInspector&)
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h: In member function 'void TDaliData::ShowMembers(TMemberInspector&, char*)':
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h:25: error: too many arguments to function 'void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)'
 TDaliDataDict.cc:200: error: ファイルのこの位置
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h:25: error: too many arguments to function 'void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)'
 TDaliDataDict.cc:203: error: ファイルのこの位置
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h:25: error: too many arguments to function 'void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)'
 TDaliDataDict.cc:206: error: ファイルのこの位置
 TDaliDataDict.cc:208: error: no matching function for call to 'TDaliData::ShowMembers(TMemberInspector&, char*&)'
 /usr/local/src/root/root_v5.28.00/include/TObject.h:211: note: candidates are: virtual void TObject::ShowMembers(TMemberInspector&)
 make: *** [TDaliDataDict.o] エラー 1
 make: ディレクトリ `/home/kondo/exp/sunday/anapaw/src' から出ます
 make: ディレクトリ `/home/kondo/exp/sunday/anapaw/src' に入ります
 g77 -O0 -fbounds-check -fno-f2c -funroll-loops -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DBABIRL -c anapaw.f
 g++ -O0  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DBABIRL -D__OUTPUT_ROOTFILE__ -pthread -m32 -I/usr/local/src/root/root_v5.28.00/include   -c -o TDaliDataDict.o TDaliDataDict.cc
 TDaliDataDict.cc:193: error: prototype for 'void  DaliData::ShowMembers(TMemberInspector&, char*)' does not match any in class 'TDaliData'
 TDaliData.h:39: error: candidate is: virtual void  DaliData::ShowMembers(TMemberInspector&)
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h: In member function 'void TDaliData::ShowMembers(TMemberInspector&, char*)':
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h:25: error: too many arguments to function 'void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)'
 TDaliDataDict.cc:200: error: ファイルのこの位置
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h:25: error: too many arguments to function 'void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)'
 TDaliDataDict.cc:203: error: ファイルのこの位置
 /usr/local/src/root/root_v5.28.00/include/RtypesImp.h:25: error: too many arguments to function 'void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)'
 TDaliDataDict.cc:206: error: ファイルのこの位置
 TDaliDataDict.cc:208: error: no matching function for call to 'TDaliData::ShowMembers(TMemberInspector&, char*&)'
 /usr/local/src/root/root_v5.28.00/include/TObject.h:211: note: candidates are: virtual void TObject::ShowMembers(TMemberInspector&)
 make: *** [TDaliDataDict.o] エラー 1

と言われる。これはイくんと同じエラー。どうやらrootのバージョンによって引数の数が違う様子。おそらくrootで解析できるように変換する部分だと思われるのでこいつら全部nouseに突っ込む。makelibはできたけど。makeanaでエラー。

 /home/kondo/exp/sunday/anapaw/lib/libanalib.a(astop.o): In function `astop_':
 astop.f:(.text+0xf3): undefined reference to `close_treefile__'
 /home/kondo/exp/sunday/anapaw/lib/libanalib.a(anaact.o): In function `anaact_':
 anaact.f:(.text+0x3070): undefined reference to `open_treefile__'
 anaact.f:(.text+0x30c4): undefined reference to `close_treefile__'
 /home/kondo/exp/sunday/anapaw/lib/libanalib.a(anasub.o): In function `evtloop_':
 anasub.f:(.text+0xaea7): undefined reference to `add_event2tree__'
 /home/kondo/exp/sunday/anapaw/lib/libanalib.a(anabatch.o): In function `batchloop_':
 anabatch.f:(.text+0x7e): undefined reference to `add_event2tree__'
 /usr/local/src/root/root_v5.28.00/lib/libCint.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore(int)@GLIBCXX_3.4.5'
 /usr/local/src/root/root_v5.28.00/lib/libCint.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()@GLIBCXX_3.4.5'
 collect2: ld はステータス 1 で終了しました
 make: *** [anapaw] エラー 1

tree関係の部分を全てコメントアウト。だがstd::...はまだ残る。これは何のせい?
調べてみるとどうやら -lstdc++ というオプションが関係している様子。これはgccでc++のコードをコンパイルするときに使うものらしい。ためしにはずしてみるとコンパイルできました!