トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

技術的雑談-OCI社版TAO1.4のインストール

技術的雑談-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.で無料配布している。
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<CHAR>::ACE_String_Base(unsigned int, CHAR = 0,
   ACE_Allocator* = 0) [with CHAR = char] <near match>
/opt/ACE_wrappers/ace/String_Base.inl:43:
   ACE_String_Base<CHAR>::ACE_String_Base(CHAR, ACE_Allocator* = 0) [with CHAR
   = char] <near match>
Library.cpp:249: no match for `ACE_String_Base<char> + 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のサポート」を追加

技術的雑談へ戻る

 突っ込み

name   comment  
URL (入力するとす ぱ むとみなします!)


技術的雑談へ戻る

TrackBack

TrackBack URL for this entry:
http://www.himajin2001.com/fswiki/tb.cgi/%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC%2DOCI%BC%D2%C8%C7TAO1%2E4%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

技術的雑談へ戻る

最終更新日時:最終更新時間:2008年07月17日 14時19分40秒
トップページに戻る