トップ 一覧 検索 ヘルプ 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.|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<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のサポート」を追加

[[技術的雑談]]へ戻る

!!突っ込み
{{comment}}

[[技術的雑談]]へ戻る

{{trackback}}

[[技術的雑談]]へ戻る