[ C++で開発 ] [ TAO CORBA実装 ]
TAO 1.6.2からVisual Studio 2008対応となりました。
ACE+TAO+CIAO-5.6.5 (TAO 1.6.5) を、Windows Vista OS上でVisual C++ 2008 Expressコンパイラを使ってビルドしインストールした記録です。
作業用ディレクトリに入手したソースコードのアーカイブを解凍ツールを使って展開します。
ACE+TAO+CIAO-5.6.5.tar.bz2
作業ディレクトリとして仮にF:\tmpの下に展開します。
F:\tmp> dir /b ACE_wrappers F:\tmp>
展開された内容にデフォルトで入っているVisual C++ 2008用のプロジェクトファイルは、IPv6設定が無効となっています。そこで、同梱のMPCツールを使ってVisual C++ 2008(vc9)用ソリューションファイルを生成して、これを用いてビルドします。
MPCツールはPerlで記述されているので、Perlをインストールする必要があります。Windows OSの場合、Cygwinを使用するかActive Perlを使用するかの方法がメジャーです。どちらも無償で入手できます。
ACE_wrappers\ace\config.h というファイルを新規に作成します。
// -*- C++ -*- #ifndef ACE_CONFIG_H #define ACE_CONFIG_H #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x600 #endif /* _WIN32_WINNT */ #define ACE_HAS_IPV6 1 #include "ace/config-win32.h" #endif /* ACE_CONFIG_H */ |
_WIN32_WINNTはデフォルトでは0x0501(Windows XP/2003)に定義されます。必要に応じてOSのバージョンに合わせて定義します。MSDNドキュメント参照。以下の表はMSDNより。
OS | _WIN32_WINNT定義値 |
---|---|
Windows 2000 | 0x0500 |
Windows XP Windows Server 2003 |
0x0501 |
Windows XP SP2 Windows Server 2003 SP1 |
0x0502 |
Windows Vista Windows Server 2008 |
0x0600 |
VC++ 2008の設定ファイル(ace/config-win32-msvc-9.h)のデフォルトで以下が定義されています。
ACE_WIN32_VC9 ACE_HAS_STANDARD_CPP_LIBRARY 1 ACE_USES_STD_NAMESPACE_FOR STDCPP_LIB 1 ACE_HAS_TIME_T_LONG_MISMATCH ACE_HAS_ITOA ACE_HAS_HEADER_ALLOCATED_CLASS_STATIC_CONST_INT_STOREAGE ACE_HAS_WORKING_EXPLICIT_TEMPLATE_DESTRUCTOR ACE_HAS_EXCEPTIONS ACE_HAS_SIG_ATOMIC_T ACE_HAS_STRERROR ACE_LACKS_STRPTIME ACE_HAS_INTRIN_H ACE_HAS_INTRINSIC_INTERLOCKED ACE_HAS_INTRINSIC_BYTESWAP ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES ACE_LACKS_STRRECVFD ACE_HAS_CPLUSPLUS_HEADERS ACE_HAS_TEMPLATE_TYPEDEFS ACE_TEMPLATES_REQUIRE_SOURCE ACE_HAS_TEMPLATE_SPECIALIZATION ACE_HAS_TLI_PROTOTYPES ACE_LACKS_LINEBUFFERED_STREAMBUF ACE_LACKS_ACE_IOSTREAM ACE_NEW_THROWS_EXCEPTIONS ACE_HAS_NEW_THROW ACE_HAS_TR24731_2005_CRT ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION_EXPORT ACE_NEEDS_FUNC_DEFINITIONS
#pragma warning(disable:4231) #pragma warning(disable:4250)
IPv6については、ACEおよびTAOのソースコード中ではマクロ定義ACE_HAS_IPV6を使って制御しています。そこで、config.hでこのマクロ定義を有効にします。
また、後述するvc9.featuresにも、ipv6=1 の記述を追加する必要があります。IPv6に必要なライブラリのリンクが追加されます。
VC++の場合は不要です。
TAO/TAOACE.mwcからmpcツールを使って必要なVisual Studio用プロジェクトファイルを生成します。
SSLを有効にする場合、ACE_wrappers\bin\MakeProjectCreator\config\vc9.features ファイルのssl行を1に修正します。
→VC++ 2008β2でコンパイルするとOpenSSLのAPI呼び出し時に引数の型変換エラーが発生します。対処方法が見出されるまではssl=0としたままの方がよいでしょう。
IPv6を使用するときは、ipv6=1を追記します。
// $Id: vc9.features 80083 2007-11-23 19:52:07Z johnnyw $ ssl=0 qos=1 cidl=0 rwho=0 sctp=0 ipv6=1 |
SSLを有効にする場合、OpenSSLをインストールしたディレクトリを、環境変数SSL_ROOTに設定します。コマンドプロンプトで設定します。OpenSSLのインストールについてはこちらを参照。
注意) Shining Light ProductionsのWindows版バイナリは、SSLのライブラリファイル名が標準とは異なるため、デフォルトのACE_TAOワークスペースの設定ではACEのSSLビルドが失敗します。
F:\tmp\ACE_wrappers> set SSL_ROOT=D:\lib\openssl F:\tmp\ACE_wrappers>
環境変数ACE_ROOTとTAO_ROOTを設定します。
F:\tmp\ACE_wrappers> set ACE_ROOT=F:\tmp\ACE_wrappers F:\tmp\ACE_wrappers> set TAO_ROOT=%ACE_ROOT%\TAO F:\tmp\ACE_wrappers>
注意) 環境変数の設定中にダブルクォーテーションが含まれるとPerlの処理で失敗します。(例:”F:\tmp\ACE_wrappers")
環境変数PATHに追加設定します。
F:\tmp\ACE_wrappers> PATH=%PATH%;%ACE_ROOT%\bin F:\tmp\ACE_wrappers>
[Cygwin環境のPerlを使用する場合]CygwinへのPATHを通します。
F:\tmp\ACE_wrappers> PATH=%PATH%;C:\cygwin\bin F:\tmp\ACE_wrappers>
MPCツールでVC++ 2008用のプロジェクトファイルを生成します。
[ActivePerlを使用する場合]
F:\tmp\ACE_wrappers> cd TAO F:\tmp\ACE_wrappers\TAO> perl ..\bin\mwc.pl -type vc9 -genins TAO_ACE.mwc Using .../TAO/ACE_wrappers/bin/MakeProjectCreator/config/MPC.cfg Generating 'vc9' output using TAO_ACE.mwc Skipping SSL_FOR_TAO (ssl_for_tao.mpc), it requires ssl. Skipping SSL (ssl.mpc), it requires ssl. 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_FoxReactor (ace_foxreactor.mpc), it requires fox. Skipping ACE_FOR_TAO (ace_for_tao.mpc), it requires ace_for_tao. Skipping ACE_FlReactor (ace_flreactor.mpc), it requires fl. Skipping ZlibCompressor (ZlibCompressor.mpc), it requires zlib. 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_FoxResource (FoxResource.mpc), it requires fox. 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 SSLIOP (SSLIOP.mpc), it requires ssl. Skipping RTCosScheduling (RTCosScheduling.mpc), it requires dummy_label. Generation Time: 3m 28s F:\tmp\ACE_wrappers\TAO>
VC++2008用プロジェクトファイル TAO_ACE.sln が生成されます。
また、インストール・スクリプト用ファイルを生成するため、-geninsオプションを指定してます。
Visual Studio統合環境を起動したときに、統合環境が環境変数ACE_ROOTやSSL_ROOTを参照できるためには、システムで環境変数を設定するか、環境変数を設定したコマンドプロンプトから統合環境を起動します。ここでは、コマンドプロンプトからVisualStudio統合環境を起動します。
F:\tmp\ACE_wrappers\TAO> "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ bin\vcvars32.bat" : F:\tmp\ACE_wrappers\TAO> vcexpress /useenv F:\tmp\ACE_wrappers\TAO>
Visual Studio .NET 2008統合環境が起動するので、[ファイル]メニューの[開く]→[プロジェクト/ソリューション]で、ACE_wrappers\TAO\TAO_ACE.slnファイルを開きます。
[ビルド]メニューの[バッチビルド]を選択し、バッチビルドダイアログで[すべて選択(S)]ボタンを押し、[ビルド]ボタンを押します。
ビルド結果生成されるバイナリの一覧はここ。
インストール・スクリプトを実行します。
F:\tmp\ACE_wrappers>perl MPC\prj_install.pl -v d:/lib/tao . :
F:\tmp\ACE_wrappers>perl MPC\prj_install.pl -a lib_output -v d:/lib/tao .
F:\tmp\ACE_wrappers>perl MPC\prj_install.pl -a exe_output -v d:/lib/tao .
F:\tmp\ACE_wrappers> copy bin\depgen.pl d:\lib\tao\bin F:\tmp\ACE_wrappers> copy bin\mpc.pl d:\lib\tao\bin F:\tmp\ACE_wrappers> copy bin\mwc.pl d:\lib\tao\bin F:\tmp\ACE_wrappers> robocopy bin\MakeProjectCreator d:\lib\tao\bin\MakeProjectCreator /E F:\tmp\ACE_wrappers> robocopy MPC d:\lib\tao\MPC F:\tmp\ACE_wrappers>
bin/mpc.plとMPC/mpc.plは同じファイル名ながら内容が異なっています。ACE/TAOプロジェクト生成時は、bin/mpc.plを使用します。
DLLやツールの実行ファイルを呼び出すための環境変数PATH設定、TAOアプリケーションのビルド時に使用するインクルードファイル・ライブラリファイルの置き場所の指定が必要となります。
TAOを利用するアプリケーションでは、伝統的に環境変数ACE_ROOTおよびTAO_ROOTを使用します。また、DLLファイルを置いたディレクトリを環境変数PATHに追加する必要があります。そこで、これら環境変数を設定しておきます。
そこで、ACEおよびTAOをインストールしたディレクトリに合わせてこれらの環境変数を再設定します。
環境変数名 | 設定方法 | 設定内容 |
---|---|---|
ACE_ROOT | 新規 |
D:\lib\tao |
TAO_ROOT | 新規 |
%ACE_ROOT%\TAO |
CIAO_ROOT | 新規 |
%ACE_ROOT%\TAO\CIAO |
DDS_ROOT | 新規 |
%ACE_ROOT%\TAO\DDS |
PATH | 追加 |
%ACE_ROOT%\binを追加する %CIAO_ROOT%\binを追加する %DDS_ROOT%\binを追加する |
TAOを使用するアプリケーションを開発する場合、インクルードファイルのパスと追加ライブラリのパスにTAOのinclude、libを指定します。また、IDLコンパイラ等のツールをVisual C++内部から呼び出す場合のツール格納ディレクトリを指定します。
表示するディレクトリ | ディレクトリに追加する内容 | 備考 |
---|---|---|
実行可能ファイル |
D:\lib\tao\bin |
IDLコンパイラをVC++内部から呼び出す場合は、この設定は必須です。 |
インクルードファイル |
D:\lib\tao |
個々のプロジェクト毎にパスを記述するならば不要。 |
ライブラリファイル |
D:\lib\tao\lib |
個々のプロジェクト毎にパスを記述するならば不要。 |