- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!技術的雑談-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}}
[[技術的雑談]]へ戻る