!!!技術的雑談-OCI社版TAO1.4のインストール !!環境 *使用OS:RedHat Enterprise Linux. Kernel 2.4.21-32.0.1.EL !!目的 オープンソースのTAO(C++によるCORBA実装)をコンパイルし、使えるようにする。 TAOはACE(オープンソースのネットワークライブラリ?)の上で動く。 なのでTAOを使うにはACEをまずセットアップする必要がある。 !!ソースの入手 [Object Computing Inc.|http://www.theaceorb.com/]で無料配布している。 TAOとACEが一塊になっているものを入手する。(OCIにはそれしかないが。) 元祖のOpen source版のTAOにはメモリーリークのバグがあり、連続使用には問題があるらしい。 (2005/10/26現在、ACE5.4a+TAO1.4a_p5が最新らしい。展開したソースの一番上のディレクトリにあるVERSIONファイルの上のほうに書いてあります。) !!ACEのコンパイル !ソースの展開 tar xfz ACE+TAO-1.4a_with_latest_patches.tar.gz でソースがカレントディレクトリに展開される。 展開は「ACE_wrapper」というディレクトリが作成され、そこに行われる。 !環境変数の設定 今ソースを展開したディレクトリパスをACE_ROOTに設定する。 export ACE_ROOT=/tmp/ACE_wrapper あと、LD_LIBRARY_PATHを設定する。 export LD_LIBRARY_PATH=/opt/ACE_wrappers/lib:$LD_LIBRARY_PATH !設定ファイルの作成 ACEのコンパイルのために、設定ファイルを2つ作る必要がある。 *$ACE_ROOT/ace/config.h $ACE_ROOT/ace/にプラットフォームごとのテンプレートがあるので、それにシンボリックリンクを張る。 今回はLinuxなので、 ln -s $ACE_ROOT/ace/config-linux.h $ACE_ROOT/ace/config.h でOK。 *$ACE_ROOT/include/makeinclude/platform_macros.GNU これも$ACE_ROOT/include/makeinclude/にプラットフォームごとのテンプレートがあるので、それに対してシンボリックリンクを張る。 ln -s $ACE_ROOT/include/makeinclude/platform_linux.GNU $ACE_ROOT/include/makeinclude/platform_macros.GNU cxxとかiccとかは多分Intel compiler用なんだろう。確認してないけど。 !make実行 $ACE_ROOTからmakeを実行する。 結構快調に走っていたが、 make[2]: 入ります ディレクトリ `/opt/ACE_wrappers/apps/soreduce' make[3]: 入ります ディレクトリ `/opt/ACE_wrappers/apps/soreduce' GNUmakefile: /opt/ACE_wrappers/apps/soreduce/GNUmakefile.soreduce MAKEFLAGS=w g++ -W -Wall -Wpointer-arith -O3 -g -pipe -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/opt/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../.. -c -o .obj/Library.o Library.cpp Library.cpp: member function 内の `void Library::load_modules()': Library.cpp:247: 文法エラー が `->' トークンの前にあります Library.cpp:248: conversion from `ACE_CString ()(...)' to `const ACE_CString' is ambiguous /opt/ACE_wrappers/ace/String_Base.inl:89: candidates are: ACE_String_Base::ACE_String_Base(unsigned int, CHAR = 0, ACE_Allocator* = 0) [with CHAR = char] /opt/ACE_wrappers/ace/String_Base.inl:43: ACE_String_Base::ACE_String_Base(CHAR, ACE_Allocator* = 0) [with CHAR = char] Library.cpp:249: no match for `ACE_String_Base + ACE_CString (&)(...)' operator /opt/ACE_wrappers/ace/Time_Value.inl:327: candidates are: ACE_Time_Value operator+(const ACE_Time_Value&, const ACE_Time_Value&) /opt/ACE_wrappers/ace/SString.inl:55: ACE_NS_WString operator+(const ACE_NS_WString&, const ACE_NS_WString&) make[3]: *** [.obj/Library.o] エラー 1 make[3]: 出ます ディレクトリ `/opt/ACE_wrappers/apps/soreduce' make[2]: *** [soreduce] エラー 2 make[2]: 出ます ディレクトリ `/opt/ACE_wrappers/apps/soreduce' make[1]: *** [all] エラー 2 make[1]: 出ます ディレクトリ `/opt/ACE_wrappers/apps' make: *** [all] エラー 2 なんて怒られて止まる。 で、問題の$ACE_ROOT/apps/soreduce/Library.cppを調べてみると、 247行目に ACE_CString ent_name (ACE_TEXT_ALWAYS_CHAR (dent[i]->d_name)); なんてあるので、エイヤで、 ACE_CString ent_name = (ACE_TEXT_ALWAYS_CHAR (dent[i]->d_name)); と、直すと文句を言わなくなった。 (正常動作できるのかどうかは知らない。) *2005年11月2日追記 soreduceというのはREADMEによると、shared libraryで、使われていないものを減らして ディスク容量を節約するツールのようです。 多分無くても困らないでしょう。 多分。 今度は最後までコンパイル完了。 !gperfのコンパイル 「TAOを使うならgperfが必要だよ」なんて書いてあったので、 cd $ACE_ROOT/apps/gperf make してみたら、もう何もやることは無いらしい。 ……まあ、確認までということで。 !ACEのテスト ACEのテストキットがあるようなので試してみる。 cd $ACE_ROOT/tests make 結構時間がかかる。 正常終了するとディレクトリ上にrun_test.plというperl scriptができているので、 ./run_test.pl で実行する。(もちろんperlが必要だけど。) 今回は、 *test/Priority_Task_Test *test/Proactor_Test の2つがエラーでボロボロ。 でも、どうしていいのかわからないのでとりあえず無視。 まあ、他は動くようなので多分大丈夫でしょう。(いいかげん) !!TAOのコンパイル !環境変数の設定 TAO_ROOT環境変数を設定します。 export TAO_ROOT=$ACE_ROOT/TAO LD_LIBRARY_PATHは変更しないのでいいのか?? →しなくてよさそうです。なぜならTAOのlib*.soも$ACE_ROOT/libにあるので。(make時にinstallされる。) !GNUmakefileの作り直し そのままではTAOに必要なACEXMLを作ってくれないらしいので、ソースツリー各所のGNUmakefileを作り直す必要があるらしいです。 cd $TAO_ROOT find . -name GNUmakefile -exec rm {} \; $ACE_ROOT/bin/mwc.pl TAOACE.mwc これでOKらしい。 !TAOコアのコンパイル cd $TAO_ROOT make で後は待つだけ。かなりかかります。 !testsのコンパイル 今のところ、Makefileがボーランドmake用に書かれているらしくてGNUのmakesだと動かない。 やれやれ…。 無視。'''……ってか、コレが一番やりたかったんだよ!!!''' と、思ったら、さっきやった、 cd $TAO_ROOT/tests find . -name GNUmakefile -exec rm {} \; $ACE_ROOT/bin/mwc.pl tests.mwc で、makeが通るようになった!!! すばらしぃ〜〜〜〜〜♪ でも、tests配下のテストを一括実行するスクリプトは無いらしい(-_-; それぞれcdした後にrun_test.plというスクリプトがあるので、それを実行するべし。 このままでは$ACE_ROOT配下が約1.1GBもあるので、適宜*.cppとか*.oとかを削除して使いましょう。 !! 追記・Windows+Cygwin32環境のOCI社版TAOのサポート OCI社版TAOをcygwin環境でコンパイルかけても一向にうまくいかないので、OCI社のTAOのページを良く見てみたら、 '''サポートされているプラットフォームにcygwinがない!!!!''' ソースコード見てみてもconfig-cygwin32.hとかがOCI社版はカレントの本家TAOのものよりも全然古い。 ACEのコンパイルの時点でmsghdr構造体とかのメンバーが足りないとか、イロイロOS周りで引っかかりまくるのでダメっぽい。 あきらめてVisualStudio VC++上でコンパイルするか本家TAO( http://www.cs.wustl.edu/~schmidt/TAO.html )をコンパイルしましょう…。 (OCI版TAOは./configureがちゃんと動かない。多分既に./configure済みのconfig-*.hを付けてるからかな?) !!履歴 *2005/10/26 -- 初版 *2005/11/02 -- 修正:途中のコンパイルエラーに解説を追加 *2008/07/17 -- 「追記・Windows+Cygwin32環境のOCI社版TAOのサポート」を追加 [[技術的雑談]]へ戻る !!突っ込み {{comment}} [[技術的雑談]]へ戻る {{trackback}} [[技術的雑談]]へ戻る