[ C++で開発 ] [ TAO CORBA実装 ]
ACE 5.4.7 + TAO 1.4.7を、Windows XP OS上にVisual C++ 7.1コンパイラでインストールしたときの記録。
Visual C++ 7.1は、Visual Studio .NET 2003に含まれるC++コンパイラです。
作業用ディレクトリに入手したソースコードのアーカイブを展開します。
作業ディレクトリとして仮にF:\tmpの下に展開します。
Cygwinのbashでの例
torutk$ cd /cygdrive/f/tmp tmp$ tar xvjf ACE+TAO.tar.bz2 : tmp$ ls -F ACE_wrappers/ tmp$
MPCツールを使ってVisual Studio .NET 2003用ソリューションファイルを生成し、これを用いてビルドします。MPCツールはPerlで記述されているので、Perlをインストールする必要があります。Windows OSの場合、Cygwinを使用するかActive Perlを使用するかの方法がメジャーです。どちらも無償で入手できます。ここではActive Perl上で実行しています。
Active Perlは、ActiveStateサイトのActivePerlダウンロードページからダウンロードできます。
ACE_wrapers\ace\config.h というファイルを新規に作成します。
// -*- C++ -*- #ifndef ACE_CONFIG_H #define ACE_CONFIG_H #define ACE_HAS_ANSI_CASTS 1 #include "ace/config-win32.h" #endif /* ACE_CONFIG_H */ |
VC++ 7.1の設定ファイル(ace/config-win32-msvc-7.h)のデフォルトでACE_HAS_SANDARD_CPP_LIBRARYが定義されています。
ACE_HAS_STANDARD_CPP_LIBRARY 1 ACE_USES_STD_NAMESPACE_FOR STDCPP_LIB 1
VC++の場合は不要です。
TAO/TAOACE.mwcからmpcツールを使って必要なVisual Studio用プロジェクトファイルを生成します。
SSLを有効にする場合、ACE_wrappers\bin\MakeProjectCreator\config\default.features ファイルのssl行を修正します。
// $Id$ // This is an automatically generated file. ssl=1 qos=1 cidl=0 rwho=0 sctp=0 |
SSLを有効にする場合、OpenSSLをインストールしたディレクトリを、環境変数SSL_ROOTに設定します。コマンドプロンプトで設定します。
D:\work\ACE_wrapperse> set SSL_ROOT=D:\lib\openssl D:\work\ACE_wrapperse>
環境変数ACE_ROOTを設定します。
D:\work\ACE_wrapperse> set ACE_ROOT=D:\work\ACE_wrappers D:\work\ACE_wrapperse>
MPCツールでVC7.1用のプロジェクトファイルを生成します。
D:\work\ACE_wrapperse> cd TAO D:\work\ACE_wrapperse\TAO> %ACE_ROOT%\bin\mwc.pl -type vc71 TAOACE.mwc Generating vc71 output using TAOACE.mwc Skipping ACE_XtReactor (ace_xtreactor.mpc), it requires xt. Skipping ACE_TkReactor (ace_tkreactor.mpc), it requires tk. Skipping ACE_QtReactor (ace_qtreactor.mpc), it requires qt. Skipping ACE_FlReactor (ace_flreactor.mpc), it requires fl. Skipping TAO_XtResource (XtResource.mpc), it requires xt. Skipping TAO_TkResource (TkResource.mpc), it requires tk. Skipping TAO_QtResource (QtResource.mpc), it requires qt. Skipping TAO_FlResource (FlResource.mpc), it requires fl. Skipping wxNamingViewer (wxNamingViewer.mpc), it requires wxWindows. Skipping NamingViewer (NamingViewer.mpc), it requires mfc. Skipping PSDL (PSDL.mpc), it requires dummy_label. Skipping PSDL_Datastore (PSDL.mpc), it requires dummy_label. Skipping PSDL_Parser (PSDL.mpc), it requires dummy_label. Skipping RTCosScheduling (RTCosScheduling.mpc), it requires dummy_label. Generation Time: 1m 16s D:\work\ACE_wrapperse\TAO>
VC7.1用プロジェクトファイル TAOACE.sln が生成されます。
Visual Studio統合環境を起動したときに、統合環境が環境変数ACE_ROOTやSSL_ROOTを参照できるためには、システムで環境変数を設定するか、環境変数を設定したコマンドプロンプトから統合環境を起動します。ここでは、コマンドプロンプトからVisualStudio統合環境を起動します。
D:\work\ACE_wrapperse\TAO> "C:\Program Files\Microsoft Visual Studio .NET 2003\ Vc7\bin\vcvars32.bat" : D:\work\ACE_wrapperse\TAO> devenv D:\work\ACE_wrapperse\TAO>
Visual Studio .NET 2003統合環境が起動するので、[ファイル]メニューの[ソリューションを開く]で、TAOACE.slnファイルを開きます。
[ビルド]メニューの[バッチビルド]を選択し、バッチビルドダイアログで[すべて選択(S)]ボタンを押し、[ビルド]ボタンを押します。
ビルド結果生成されるバイナリの一覧はここ。
ACE+TAOを展開してビルドしたまま利用してもよいのですが、そのままでは大量のディスク(1.9GB以上)を食っているので、TAOを利用するのに必要なファイルだけを抜き出して別なディレクトリにインストールします。
以下、D:\lib\taoディレクトリ下にインストールする場合です。
D:\lib\tao +--- bin 実行ファイル、DLLファイルを格納 +--- idls IDL定義ファイルを格納 +--- include ヘッダファイル等を格納 | +--- ace | +--- tao +--- lib リンク時に必要なライブラリファイルを格納
tmp$ mkdir d:/lib/tao tmp$ mkdir d:/lib/tao/bin tmp$ mkdir d:/lib/tao/idls tmp$ mkdir d:/lib/tao/include tmp$ mkdir d:/lib/tao/include/ace tmp$ mkdir d:/lib/tao/include/tao tmp$ mkdir d:/lib/tao/lib tmp$
ヘッダファイルのうち、Windows以外のプラットフォーム用config-*.hは不要なのでコピーしません。
*iと*inlは全てコピーします。
*.cppファイルは、ヘッダファイル内で#include指令で記述されているものだけが必要なので、これを引っ掛けてコピーします。判定にはUNIXのfind、grep、awkコマンドを使用しています。
必要なファイルを選別してインストール
ACE_wrappers$ cd ace ace$ find . -maxdepth 1 -name "*.h" ! -name "config-[^w]*" \ -exec cp {} /cygdrive/d/lib/tao/include/ace/ \; ace$ cp config-all.h *.i *.inl /cygdrive/d/lib/tao/include/ace/ ace$ find . -maxdepth 1 -name "*.h" ! -name "config-[^w]*" \ -print | xargs grep "^[ ]*#[ ]*include" | grep ".cpp" | \ awk 'FS="\""{split($0, chank); gsub(/ace\//, "", chank[2]); \ print "cp", chank[2],"/cygdrive/d/lib/tao/include/ace/"}' >copy.list ace$ sh copy.list ace$ cp config-lite.h /cygdrive/d/lib/tao/include/ace/ ace$ find os_include/ -name "*.h" -print|cpio -pd \ /cygdrive/d/lib/ace/include/ace/ ace$
*.hと*iと*inlは全てコピーします。
*.cppファイルは、ヘッダファイル内で#include指令で記述されているものだけが必要なので、これを引っ掛けてコピーします。判定にはUNIXのfind、grep、awkコマンドを使用していますがあまりきれいではありません。とりあえず、*.cppが277ファイルあるうち16ファイルがコピー対象となりました。
*.hと*.iと*.inlはディレクトリ構成を維持してコピーします。
tmp$ cd ACE_wrappers/TAO/tao tao$ find . \( -name "*.h" -o -name "*.i" -o -name "*.inl" \) -print | cpio -pd /cygdrive/d/lib/tao/include/tao/ 8070 blocks tao$
ヘッダファイル(*.h)中からインクルードしている*.cppファイルを検索し、ディレクトリ構成を維持してコピーします。
tao$ find . -name "*.h" -print|xargs grep "^[ ]*#[ ]*include" | grep ".cpp" | awk 'FS="\""{split($0, chank); gsub(/.*\//, "", chank[2]); print "find . -name", chank[2], "-print | cpio -pd /cygdrive/d/lib/tao/include/tao/"}' > cpio.list tao$ sh cpio.list 13 blocks 12 blocks : tao$
tao$ cd .. TAO$ find . \( -name "*tests" -o -name "examples" -o -name "Test" -o -name "Example" -o -name "docs" -o -name "CIAO" \) -prune -o -name "*idl" -print | cpio -pd /cygdrive/d/lib/tao/idls/ 967 blocks TAO$
Windowsの共有ライブラリファイル(DLL)は、リンク時に必要なインポートライブラリファイル(*.lib)と実行時に必要なダイナミックリンクライブラリファイル(*.dll)に分かれています。リンク解決時に必要なファイルをコピーします。
TAO$ cd .. ACE_wrappers$ find . -name "*.lib" -exec cp {} /cygdrive/d/lib/tao/lib/ \; ACE_wrappers$
Windowsの共有ライブラリファイル(DLL)は、ライブラリを使用するアプリケーションが起動したときに読み込まれます(黙示のリンクの場合)。その際、DLLファイルは環境変数PATHの中から検索されるので、DLLファイルは環境変数PATHで指定するディレクトリに配置します。
ACE_wrappers$ find . \( -name "*.dll" -o -name "*.exe" \) \ -exec cp {} /cygdrive/d/lib/tao/bin/ \; ACE_wrappers$
ACE・TAOがどのバージョンかを示すファイルが1つあるので、これをコピーしておきます。
ACE_wrappers$ cp VERSION /cygdrive/d/lib/tao/ACE_VERSION ACE_wrappers$ cp TAO/VERSION /cygdrive/d/lib/tao/TAO_VERSION ACE_wrappers$
DLLやツールの実行ファイルを呼び出すための環境変数PATH設定、TAOアプリケーションのビルド時に使用するインクルードファイル・ライブラリファイルの置き場所の指定が必要となります。
TAOを利用するアプリケーションでは、伝統的に環境変数TAO_ROOTを使用します。また、DLLファイルを置いたディレクトリを環境変数PATHに追加する必要があります。そこで、この2つの環境変数を設定しておきます。
環境変数名 | 設定方法 | 設定内容 |
---|---|---|
TAO_ROOT | 新規作成 |
D:\lib\tao |
PATH | 追加 |
%TAO_ROOT%\binを追加する[*1] |
[*1] %TAO_ROOT%\binを環境変数PATHに記述しても、%TAO_ROOT%が正しく環境変数TAO_ROOTの中身に展開されないかもしれません。
TAOを使用するアプリケーションを開発する場合、インクルードファイルのパスと追加ライブラリのパスにTAOのinclude、libを指定します。また、IDLコンパイラ等のツールをVisual C++内部から呼び出す場合のツール格納ディレクトリを指定します。
表示するディレクトリ | ディレクトリに追加する内容 | 備考 |
---|---|---|
実行可能ファイル |
D:\lib\tao\bin |
IDLコンパイラをVC++内部から呼び出す場合は、この設定は必須です。 |
インクルードファイル |
D:\lib\tao\include |
個々のプロジェクト毎にパスを記述するならば不要。 |
ライブラリファイル |
D:\lib\tao\lib |
個々のプロジェクト毎にパスを記述するならば不要。 |