[ C++で開発 ] [ TAO CORBA実装 ]

TAO1.4.7 Windows Visual C++ 7.1インストール記録

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ダウンロードページからダウンロードできます。

ビルド実施記録

1. config.hの編集

ACE_wrapers\ace\config.h というファイルを新規に作成します。

ACE_wrappers\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

2. platform_macros.GNUの編集

VC++の場合は不要です。

3. コンパイル・リンク

ACEとTAOを一緒にビルドする場合の設定

TAO/TAOACE.mwcからmpcツールを使って必要なVisual Studio用プロジェクトファイルを生成します。

SSLを有効にする場合、ACE_wrappers\bin\MakeProjectCreator\config\default.features ファイルのssl行を修正します。

ACE_wrappers\bin\MakeProjectCreator\config\default.featuresの記述
// $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)]ボタンを押し、[ビルド]ボタンを押します。

ビルド結果生成されるバイナリの一覧はここ

4. インストール

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$

ヘッダファイル群のコピー(ACE)

ヘッダファイルのうち、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$

ヘッダファイル群のコピー(TAO)

*.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$

IDLファイル群のコピー

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$ 

DLL、実行ファイルのコピー

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
個々のプロジェクト毎にパスを記述するならば不要。