[ C++で開発 ] [ C++でCORBA ]

Install TAO on Windows 2000

このページの内容は、ACEインストールのページおよびTAOインストールのページへ移行中です。

ACE/TAOのインストール

入手ファイル

TAOのページより、以下のファイルをダウンロードする。

  1. ACE+TAO.tar.bz2

2003年1月16日、ACE-5.3+TAO-1.3がリリースされています。

これを適当な作業用ディレクトリに展開する。すると、以下のようなディレクトリ構造が展開される。展開するだけで、183MBのディスク容量を消費した。

ACE+TAOソース・ディレクトリ構造
ACE_wrappers ACEXML XMLパーサ・フレームワーク(SAX2.0)
ASNMP ACE+SNMP!(Another SNMP API)
ChangeLogs ACEの変更履歴
PACE POSIX ACE. 軽量化。POSIX.1様の下位インタフェースでCで記述している。
TAO ChangeLogs TAOの変更履歴
TAO_IDL IDLコンパイラ
docs
examples CORBAのサンプルプログラム
man
orbsvcs Concurrency_Service 実行ファイル
CosEvent_Service 実行ファイル
Dump_Schedule
Event_Service 実行ファイル
IFR_Service 実行ファイル
ImplRepo_Service 実行ファイル
LifeCycle_Service 実行ファイル
LoadBalancer 実行ファイル
Logging_Service 実行ファイル
Naming_Service 実行ファイル
Notify_Service 実行ファイル
PSS Persistece Stateサービス・コンパイラ
Scheduling_Service 実行ファイル
TAO_Service サービス管理サーバ
Time_Service 実行ファイル
Trading_Service 実行ファイル
examples
orbsvcs AV A/V Streamsサービス
Concurrency Concurrencyサービス
CosEvent Eventサービス
ESF
ETCL
Event Real-time Eventサービス
FaultTolerance
IFRService
LifeCycle LifeCycleサービス
LoadBalancing Load Balancingサービス
Log Loggingサービス
Naming Namingサービス
Notify Notificationサービス
PortableGroup
Property Propertyサービス
Sched Schedulingサービス
Security Securityサービス
SSLIOP SSLIOP Pluggableプロトコル
Time Timeサービス
Trader Tradingサービス
performance-tests
tests
performance-tests
tao
tests
utils
ace
apps
bin
docs
etc
examples
include
m4
man
netsvcs
os-patches
performance-tests
tests
websvcs

ビルド

ビルド可能なコンパイラ

ドキュメントによれば、Windowsでは以下のコンパイラに対応している。

  1. Visual C++ 5.0/6.0
  2. Borland C++ Builder
  3. (MinGW)
Visual C++用プロジェクトファイル
ワークスペース名 場所 備考
TAOACE.dsw ACE_wrappers/TAO TAOと必要なACEのプロジェクトをロードする。
TAOACE_Static.dsw 上記のスタティックリンクライブラリ作成用。但し、TAOACE.dswで構築する全てのプロジェクトをサポートはしていない。
TAO.dsw ACE_wrappers/TAO/tao TAOビルド用
ace.dsw ACE_wrappers/ace ACEビルド用

ビルド対象

Windows用のACE・TAOは、以下の種類がありちょっと複雑である。すべてをビルドするとかなりディスク容量を消費するので、生成するライブラリ種類は絞った方がよいだろう。

ライブラリ形式 MFC有無 ビルド種類 構成名称
スタティック - Release Win32 - Static Release
- Debug Win32 - Static Debug
ダイナミック Release Win32 - Release
Debug Win32 - Debug
Release Win32 - MFC Release
Debug Win32 - MFC Debug

以下はビルドするプロジェクトファイルとビルド種類毎に生成されるライブラリ・実行ファイルの対応である。

TAOACE.dswに記載されているプロジェクト
プロジェクト名 ダイナミック 依存先
MFC無 MFC有
Release Debug Releaes Debug
ACE DLL ace.dll aced.dll acemfc.dll acemfcd.dll -
ACE LIB aces.lib asesd.lib - -
ACE_RMCast ACE_RMCast.dll ACE_RMCastd.dll - -
ACE_SSL ACE_SSL.dll ACE_SSLd.dll - - ACE DLL
ACE_QoS DLL ACE_Qos.dll ACE_QoSd.dll - - ACE DLL
XML_Common ACEXML.dll ACEXMLD.dll
ACEXML_Parser ACEXML_Parser.dll ACEXML_Parserd.dll - - ACE DLL
XML_Common
TAO DLL TAO.dll TAOd.dll TAOmfc.dll TAOmfcd.dll ACE DLL
TAO_IDL_FE_DLL TAO_IDL_FE_DLL.dll TAO_IDL_FE_DLLd.dll - - ACE DLL
gperf
TAO_IDL_BE_DLL TAO_IDL_BE_DLL.dll TAO_IDL_BE_DLLd.dll TAO_IDL_FE_DLL
TAO_IDL Compiler tao_idl.exe TAO_IDL_BE_DLL
TAO_IDL_FE_DLL
AV TAO_AV.dll TAO_AVd.dll TAO_AVmfc.dll TAO_AVmfcd.dll ACE_QoS DLL
TAO DLL
TAO_IDL Compiler
CosProperty
CosNaming
CosTrading
IORTable
BiDirGIOP TAO_BiDirGIOP.dll TAO_BiDirGIOPd.dll TAO_BiDirGIOPmfc.dll TAO_BiDirGIOPmfcd.dll TAO DLL
Concurrency_Service Concurrency_Service.exe - - CosConcurrency
CosNaming
CosConcurrency TAO_CosConcurrency.dll TAO_CosConcurrencyd.dll TAO_CosConcurrencymfc.dll TAO_CosConcurrencymfcd.dll TAO DLL
TAO_IDL Compiler
PortableServer
CosEvent TAO_CosEvent.dll TAO_CosEventd.dll TAO_CosEventmfc.dll TAO_CosEventmfcd.dll TAO DLL
TAO_IDL Compiler
CosNaming
Messaging
CosEvent_Service CosEvent_Service.exe - - CosEvent
CosNaming
CosLifeCycle TAO_CosLifeCycle.dll TAO_CosLifeCycled.dll TAO_CosLifeCyclemfc.dll TAO_CosLifeCyclemfcd.dll TAO DLL
TAO_IDL Compiler
CosNaming
CosLoadBalancing TAO_CosLoadBalancing.dll TAO_CosLoadBalancingd.dll TAO_CosLoadBalancingmfc.dll TAO_CosLoadBalancingmfcd.dll PortableGroup
Messaging
CosNaming TAO_CosNaming.dll TAO_CosNamingd.dll TAO_CosNamingmfc.dll TAO_CosNamingmfcd.dll Svc Utils
IORTable
CosNotification TAO_CosNotification.dll TAO_CosNotificationd.dll TAO_CosNotificationmfc.dll TAO_CosNotificationmfcd.dll CosEvent
ETCL DLL
DynamicAny
CosProperty TAO_CosProperty.dll TAO_CosPropertyd.dll TAO_CosPropertymfc.dll TAO_CosPropertymfcd.dll TAO DLL
TAO_IDL Compiler
gperf
PortableServer
CosTime TAO_CosTime.dll TAO_CosTimed.dll TAO_CosTimemfc.dll TAO_CosTimemfcd.dll TAO DLL
TAO_IDL Compiler
CosNaming
CosTrading TAO_CosTrading.dll TAO_CosTradingd.dll TAO_CosTradingmfc.dll TAO_CosTradingmfcd.dll TAO DLL
TAO_IDL Compiler
DynamicAny
Domain TAO_Domain.dll TAO_Domaind.dll - - PortableServer
IFR_Client
DsEventLogAdmin TAO_DsEventLogAdmin.dll TAO_DsEventLogAdmind.dll - - CosEvent
DsLogAdmin
DsLogAdmin TAO_DsLogAdmin.dll TAO_DsLogAdmind.dll TAO_DsLogAdminmfc.dll TAO_DsLogAdminmfcd.dll Svc Utils
DynamicAny
ETCL DLL
DsNotifyLogAdmin TAO_DsNotifyLogAdmin.dll TAO_DsNotifyLogAdmind.dll - - CosNotification
DsEventLogAdmin
Dump_Schedule Dump_Schedule.exe - - CosNaming
RTOLDEvent
RTSched
DynamicAny TAO_DynamicAny.dll TAO_DynamicAnyd.dll TAO_DynamicAnymfc.dll TAO_DynamicAnymfcd.dll TAO DLL
DynamicInterface TAO_DynamicInterface.dll TAO_DynamicInterfaced.dll TAO_DynamicInterfacemfc.dll TAO_DynamicInterfacemfcd.dll TAO DLL
PortableServer
ETCL DLL ETCL.dll? ETCLd.dll? - - TAO DLL
Event_Service Event_Service.exe - - CosNaming
Messaging
RTEvent
RTOLDEvent
RTSched
RTSchedEvent
FT ORB TAO_FT_ORB.dll TAO_FT_ORBd.dll TAO_FT_ORBmfc.dll TAO_FT_ORBmfcd.dll ACE DLL
IORManip
PortableServer
TAO DLL
Fault Tolerance TAO_Fault_Tolerance.dll TAO_Fault_Toleranced.dll TAO_Fault_Tolerancemfc.dll TAO_Fault_Tolerancemfcd.dll ACE DLL
FT ORB
CosEvent
CosNaming
CosNotification
IORManip
PortableServer
Svc Utils
TAO DLL
IFRService TAO_IFRSERVICE.dll TAO_IFRServiced.dll TAO_IFRServicemfc.dll TAO_IFRServicemfcd.dll IORTable
PortableServer
Svc Utils
TAO DLL
TypeCodeFactory
IFR_Client TAO_IFR_Client.dll TAO_IFR_Clientd.dll TAO_IFR_Clientmfc.dll TAO_IFR_Clientmfcd.dll TAO DLL
IFR_Service IFR_Service.exe - - IFRService
IORManip TAO_IORManip.dll TAO_IORManipd.dll TAO_IORManipmfc.dll TAO_IORManipmfcd.dll TAO DLL
IORTable TAO_IORTable.dll TAO_IORTabled.dll TAO_IORTablemfc.dll TAO_IORTablemfcd.dll TAO DLL
ImR_Activator ImR_Activator.exe - - ACEXML_Parser
IORTable
Svc Utils
ImplRepo_Service ImplRepo_Service.exe - - ACE DLL
Svc Utils
TAO DLL
IORTable
DynamicInterface
PortableServer
LifeCycle_Service LifeCycle_Service.exe - - CosLifeCycle
CosNaming
CosTrading
LoadManager LoadManager.exe CosLoadBalancing
LoadMonitor CosLoadBalancing
Messaging TAO DLL
NT_Naming_Service CosNaming
Naming_Service CosNaming
Notify_Service CosNaming
CosNotification
PortableGroup PortableServer
CosNaming
PortableServer TAO DLL
RTCORBA TAO DLL
RTCORBAEvent RTCORBA
RTEvent
RTPortableServer
Messaging
RTEvent TAO DLL
TAO_IDL Compiler
Svc Utils
CosNaming
RTSched
Messaging
RTEventLog CosEvent
DsLogAdmin
RTEvent
RTOLDEvent TAO DLL
TAO_IDL Compiler
RTEvent
RTSched
RTPortableServer PortableServer
RTCORBA
TAO DLL
RTSched TAO DLL
TAO_IDL Compiler
CosNaming
Svc Utils
RTSchedEvent TAO DLL
TAO_IDL Compiler
RTEvent
RTSched
SSLIOP ACE_SSL
Security
Scheduling_Service CosNaming
RTSched
Security TAO DLL
TAO_IDL Compiler
PortableServer
SmartProxies TAO DLL
Svc Utils TAO DLL
TAO_IDL Compiler
PortableServer
TAO_IFR_BE_DLL IFR_Service
TAO_IDL_FE_DLL
TAO_Strategies TAO DLL
Trading_Service CosNaming
CosTrading
Svc Utils
TypeCodeFactory IFR_Client
gperf gperf_lib
ACE DLL
tao_ifr
tao_imr

ACE_wrappers\ace\config.hファイルの作成

次の1行を記述する。

    #include "ace/config-win32.h"

もし、標準C++ヘッダ(<iostream>や<cstdio>など)を使うなら、上記#includeより前に以下の1行を記述する。

    #define ACE_HAS_STANDARD_CPP_LIBRARY 1

ACEをMFCと一緒に使用する場合、上記#includeより前に以下の1行を記述する。

    #define ACE_HAS_MFC 1
ACE_wrappers\ace\config.hの記述(例)
#define ACE_HAS_MFC 1
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#include "ace/config-win32.h"

Windowsでのサポートコンパイラは、MS VC++/BORLAND C++/IBM C++/MinGW32/Cygwin32のようだ。

スタティック形式のライブラリを使用する場合の注意点

スタティック版のACEライブラリを作るときには、ACE_AS_STATIC_LIBSを定義している。スタティック版のACEライブラリを使用するアプリケーションは、プロジェクト設定にACE_AS_STATIC_LIBSを定義する。

また、ACE_NO_INLINEをconfig.hファイルに定義することもできる。定義した場合、スタティックライブラリや実行ファイルのさじを減少させることができる。

    #define ACE_NO_INLINE

環境変数ACE_ROOT、TAO_ROOTの設定

環境変数名 設定内容 設定例(ACE+TAOをD:\project\tao以下に展開した場合
ACE_ROOT ACEをインストールしたディレクトリ D:\project\tao\ACE_wrappers
TAO_ROOT TAOをインストールしたディレクトリ %ACE_ROOT%\TAO

VC++でビルドする際にこれらの環境変数は必ずしも必要ではないが、ACE/TAOを利用するアプリケーションのプロジェクトファイルを構築する際に、ライブラリパスやインクルードパスを指定する記述に環境変数を使った方が望ましいので指定しておく。

一括ビルド(ACE+TAO)

以下のワークスペースは、ACEとTAOを一括したものである。

ACE_wrappers\TAO\TAOACE.dsw

これをVC++で開いてから、バッチビルドを実行する。途中いくつかエラーが出たりしてビルドできないものもあったが一通り終わった。ディスクは2.54GBを消費していた。(でかい!)

スタティックライブラリ生成用ビルド(ACE+TAO)

以下のワークスペースは、ACEとTAOのスタティックライブラリを構築するものである。

ACE_wrappers\TAO\TAOACE_static.dsw

最小セットのビルド

ACE+TAOはとてつもなく大きく、ビルド時間も数時間を要する。そこで必要最小限のビルドをする。ビルドする対象は以下のとおり。

ACE_wrappers ace
apps gperf
TAO tao
TAO_IDL
orbsvcs orbsvcs

また、orbsvcsディレクトリ下にあるCORBAサービスをすべてビルドすると時間がかかるので、必要とするサービスだけをビルドする。サービスを指定する方法は、

  1. ACE_wrappers/include/makeinclude/platform_macros.GNU に記述
  2. makeのコマンドラインでORBSVCSマクロに列挙
  3. TAO_ORBSVCS環境変数に記述

ACEのビルド

ACE用のプロジェクトファイルは以下である。

ACE_wrappers\ace\ace.dsw

この中には、次のビルドが設定されている。

ACE DLL Win32 MFC Release
MFC Debug
Release
Debug
ACE LIB Win32 Pharlap ETS Static Release 旧Phar Lap社のWin32ハードリアルタイムOS用
(ETS:Embedded ToolSuit)
Pharlap ETS Static Debug
Static Release
Static Debug

ビルド中に発生した問題

ACE_SSL/SSLIOPでインクルードファイルが見つからないエラー発生

問題点

oenssl/xxx.hが見つからないため。これはACE_SSL/SSLIOPがOpenSSLというオープンソースなSSLのライブラリに依存しているため。ACE_SSLをビルドするなら、先にOpenSSLをインストールしておく必要がある。

解決法

OpenSSLがインストールされていなければインストールする。
ビルド時には、OpenSSLのインクルードパス/ライブラリパスを指定しておく必要がある。プロジェクトファイルに記述する方法とシステム全体(Visual C++)で設定する方法がある。OpenSSLは、後述のインストールでコピーしたディレクトリの場合である。

ACE_SSL/SSLIOPのプロジェクトで設定する場合の追加事項
設定項目 設定対象 設定個所 追加前 追加後
インクルードファイルのパス Win32 Release
Win32 Debug
[C/C++]タブのカテゴリ「プリプロセッサ」
../..
../..,d:/win32app/lib/openssl/include
追加ライブラリのパス [リンク]タブのカテゴリ「インプット」
なし
d:/win32app/lib/openssl/lib
システム全体で設定する場合の追加事項
設定項目 設定個所 追加内容
インクルードファイルのパス [ツール]→[オプション]→[ディレクトリ]タブ→インクルードファイル d:\win32app\lib\openssl\include
ライブラリのパス [ツール]→[オプション]→[ディレクトリ]タブ→ライブラリファイル d:\win32app\lib\openssl\lib
OpenSSLのインストール(VC++編)

OpenSSLはオープンソースとして公開されているので、ソースが入手できる。2003年1月28日現在Ver.0.9.7が最新。インストール方法をGoogleってみると、いくつか見つかった。手っ取り早いのは、バイナリを入れることだろう。

Microsoft Assemblerは現在DDKに含まれている。前は無償でダウンロードできたが、今はCDを注文する必要がある。費用は送料のみで$25。

ActivePerlがインストールされていなければ、まずActivePerlをインストールする。左上のDownloadのロゴをクリックすると登録ページになる。Register情報に何か入れて(入れなくても可)次へ進むとダウンロードページになる。2003年1月28日現在、Ver.5.8.0 build 804が最新。

F:\work\openssl-0.9.7>perl Configure VC-WIN32
Configuring for VC-WIN32
  : [中略]
Configured for VC-WIN32.

F:\work\openssl-0.9.7>

次に、アセンブラを使うか使わないかで実行するコマンドが変わる。アセンブラを使うと処理速度が速くなるとある。RSAだと2倍だそうな。

  1. MASM(Microsoft Assembler)があるなら、ms\do_masm を実行する
  2. NASM(Free Netwide Assembler)があるなら、ms\do_nasmを実行する
  3. アセンブラを使わないなら、ms\do_ms を実行する

ここではアセンブラがないのでとりあえずms\do_msを実行する。

F:\work\openssl-0.9.7>ms\do_ms
  : [中略]
F:\work\openssl-0.9.7>

nmakeを実行するので、VC++コマンドライン環境の設定をしておく。%ProgramFiles%\Microsoft Visual Studio\VC98\Bin\VCVARS32.BATを実行すれば設定される。

F:\work\openssl-0.9.7>"%ProgramFiles%\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
Setting environment for using Microsoft Visual C++ tools.
F:\work\openssl-0.9.7>nmake -f ms\ntdll.mak
  : [中略]
F:\work\openssl-0.9.7>

生成物をテストするなら以下のように。passed all testsと表示されればOKと思われる。

F:\work\openssl-0.9.7>cd out32dll
F:\work\openssl-0.9.7\out32dll>test ..\ms\test
  : [中略]
passed all tests
F:\work\openssl-0.9.7\out32dll>

インクルードファイル、ライブラリファイル、実行コマンドファイル等をインストールしたい場所にコピーする。気の利いたインストーラなぞはないので、自力でコピーする。ここでは、D:\win32app\lib\opensslの中にコピーする。

F:\work\openssl-0.9.7\out32dll>cd ..
F:\work\openssl-0.9.7>md d:\win32app\lib\openssl
F:\work\openssl-0.9.7>md d:\win32app\lib\openssl\bin
F:\work\openssl-0.9.7>md d:\win32app\lib\openssl\lib
F:\work\openssl-0.9.7>md d:\win32app\lib\openssl\include
F:\work\openssl-0.9.7>md d:\win32app\lib\openssl\include\openssl
F:\work\openssl-0.9.7>copy /b inc32\openssl\* d:\win32app\lib\openssl\include\openssl
F:\work\openssl-0.9.7>copy /b out32dll\ssleay32.lib d:\win32app\lib\openssl\lib
F:\work\openssl-0.9.7>copy /b out32dll\libeay32.lib d:\win32app\lib\openssl\lib
F:\work\openssl-0.9.7>copy /b out32dll\ssleay32.dll d:\win32app\lib\openssl\bin
F:\work\openssl-0.9.7>copy /b out32dll\libeay32.dll d:\win32app\lib\openssl\bin
F:\work\openssl-0.9.7>copy /b out32dll\openssl.exe d:\win32app\lib\openssl\bin
F:\work\openssl-0.9.7>

上記の手順で作成しコピーしたバイナリ一式はこれです。(以下のスタティック版は含まれていない)

もし、スタティックリンク版のライブラリが必要な場合には以下のようにビルドします。

F:\work\openssl-0.9.7>nmake -f ms\nt.mak
  : [中略]
F:\work\openssl-0.9.7>

DLL版と同じ実行ファイル名、.libファイル名が生成されるので、ファイルのコピー先は分けた方がよいでしょう。

F:\work\openssl-0.9.7>md d:\win32app\lib\openssl\sbin
F:\work\openssl-0.9.7>md d:\win32app\lib\openssl\slib
F:\work\openssl-0.9.7>copy /b out32\ssleay32.lib d:\win32app\lib\openssl\slib
F:\work\openssl-0.9.7>copy /b out32\libeay32.lib d:\win32app\lib\openssl\slib
F:\work\openssl-0.9.7>copy /b out32\openssl.exe  d:\win32app\lib\openssl\sbin
F:\work\openssl-0.9.7>

tao_idl.exeを起動しようとしてTAO_IDL_BE_DLL.dllが見つからないエラー発生

問題点

いくつかのプロジェクトで、TAO_IDLコンパイラを起動しようとするがエラーが発生する。いずれもDebugビルドではTAO_IDLコンパイラ起動に成功している。

CosLifeCycle - Win32 Release
PortableGroup - Win32 Release
CosNotification - Win32 Release
CosTime - Win32 Release
DsLogAdmin - Win32 Release
RTSched - Win32 Release
FT ORB - Win32 Release
Fault Tolerance - Win32 Release
RTEventLog - Win32 Release
Security - Win32 Release

Releaseビルドのときに呼び出されるtao_idl.exeは%ACE_ROOT%\bin\releaseにあるが、TAO_IDL_BE_DLL.dllは%ACE_ROOT%\binにある。%ACE_ROOT%\binには環境変数PATHは通っていない。

解決法

%ACE_ROOT%\docs\msvc_notes.txt に解決方法が記載されている。いくつか方法があるが、環境変数PATHに%ACE_ROOT%\binを追加する方法と、Visual C++の[ツール]→[オプション]→[ディレクトリ]タブで[実行可能ファイル]の[ディレクトリ・リスト]に%ACE_ROOT%\binを追加する方法がある。後者の場合(環境変数を含めたディレクトリを追加する方法がよく分からないので絶対パスで記述した。
なお、同様にインクルードパスとしてACE用ヘッダ(%ACE_ROOT%)、TAO用ヘッダ(%TAO_ROOT%)、CORBAサービス用ヘッダ(%TAO_ROOT%\orbsvcs)を[インクルードファイル]の[ディレクトリ・リスト]に追加するとよい。
同じくライブラリパスとして%ACE_ROOT%\binを[ライブラリファイル]の[ディレクトリ・リスト]に追加するとよい。

AVでリンク時にACE_QoSmfcd.lib/ACE_QoSmfc.libが見つからないエラー発生

AV - Win32 MFC Debug
AV - Win32 MFC Release

問題点

ACE_QoSのプロジェクトファイルを見ると、Win32 Debug/Win32 Releaseのみで、MFC対応版の設定がない。

PortableGroupでCosNaming.idlが見つからないエラー発生

タイプライブラリを作成中、PortableGroup.idlがインクルードしているCosNaming.idlが見つからないため、midl.exeの実行エラーが生じている。

PortableGroup - Win32 MFC Debug
PortableGroup - Win32 MFC Release

CosNotificationでTAO_ETCLmfcd.lib/TAO_ETCLmfc.libが見つからないエラー発生

CosNotification - Win32 MFC Debug
CosNotification - Win32 MFC Release

問題点

ETCLのプロジェクトファイルを見ると、Win32 Debug/Win32 Releaseのみで、MFC対応版の設定がない。

DsLogAdminリンク時に外部シンボル未解決エラー発生

DsLogAdmin - Win32 MFC Debug
DsLogAdmin - Win32 MFC Release

DsEventLogAdminでコンパイル時にオプション指定エラー発生

afxver_.hでC1189: _AFXDLLのビルドには/MDスイッチを使え、というエラーが出ている。

DsEventLogAdmin - Win32 Release

RTSchedEventでTAO_RTSched.libが見つからないエラー発生

RTSchedEvent - Win32 Release

IFRServiceリンク時に外部シンボル未解決エラー発生

IFRService - Win32 MFC Debug
IFRService - Win32 MFC Release

RTCORBAEventでTAO_RTEvent.lib/TAO_RTCORBAmfc.lib/TAO_RTCORBAmfcd.libが見つからないエラー発生

RTCORBAEvent - Win32 Release
RTCORBAEvent - Win32 MFC Debug
RTCORBAEvent - Win32 MFC Release

インストール

ビルド直後は、ソースコード、ヘッダファイル、各種プロジェクトファイル、コンパイラ中間生成ファイル、ライブラリファイル、実行ファイルなどが同じディレクトリツリーに混在したままとなっている。ここから必要なものだけ抜き出したいのが人情だが、現在のACE+TAOはこの点が考慮されていない。例えばヘッダファイルをとってみても、ACEを利用するアプリケーションに公開するヘッダファイルなのかACEライブラリ自身をビルドする際に使用するヘッダファイルなのか識別は困難である。以下試行錯誤の経過を記す。

ACE

ビルド後のACE関連ファイルから、ACEを利用するアプリケーションに必要なファイルだけを取り出す。ソースツリーの中に以下のように展開されている。

ACE_wrappers
     +--- ace
     |     +--- *.h / *.i / *.cpp  ヘッダファイル、インライン展開ファイル、ソースファイル
     +--- bin
     |     +--- *.dll
     :

これを、以下のディレクトリへ展開する。

d:\win32app\lib\ace
     +--- bin
     |     +--- ace.dll       ACE Release版 DLL
     |     +--- aced.dll      ACE Debug版 DLL
     |     +--- acemfc.dll    ACE with MFC Release版 DLL
     |     +--- acemfcd.dll   ACE with MFC Debug版 DLL
     +--- lib
     |     +--- ace.lib       ACE Release版 DLL用インポートライブラリ
     |     +--- aced.lib      ACE Debug版 DLL用インポートライブラリ
     |     +--- acemfc.lib    ACE with MFC Release版 DLL用インポートライブラリ
     |     +--- acemfcd.lib   ACE with MFC Debug版 DLL用インポートライブラリ
     |     +--- aces.lib      ACE Release版 スタティックリンクライブラリ
     |     +--- acesd.lib     ACE Debug版 スタティックリンクライブラリ
     +--- include
           +--- ace
                 +--- ACE.h
                 +--- ACE.i
                 +--- ACE_export.h
                 +--- Addr.h
                 +--- Addr.i
                 +--- Basic_Types.h
                 +--- Basic_Types.i
                 +--- Default_Constants.h
                 +--- Flag_Manip.h
                 +--- Flag_Manip.i
                 +--- Global_Macros.h
                 +--- Handle_Ops.h
                 +--- Handle_Ops.i
                 +--- INET_Addr.h
                 +--- INET_Addr.i
                 +--- Init_ACE.h
                 +--- Init_ACE.i
                 +--- IPC_SAP.h
                 +--- IPC_SAP.i
                 +--- Lib_Find.h
                 +--- Lib_Find.i
                 +--- Log_Msg.h
                 +--- Log_Priority.h
                 +--- Managed_Object.cpp
                 +--- Managed_Object.h
                 +--- Managed_Object.i
                 +--- Min_Max.h
                 +--- Object_Manager.h
                 +--- Object_Manager.i
                 +--- OS.h
                 +--- OS.i
                 +--- OS_Dirent.h
                 +--- OS_Dirent.inl
                 +--- OS_Errno.h
                 +--- OS_Errno.inl
                 +--- OS_Export.h
                 +--- OS_Log_Msg_Attributes.h
                 +--- OS_Log_Msg_Attributes.inl
                 +--- OS_Memory.h
                 +--- OS_Memory.inl
                 +--- OS_String.h
                 +--- OS_String.inl
                 +--- OS_TLI.h
                 +--- OS_TLI.inl
                 +--- SOCK.h
                 +--- SOCK.i
                 +--- SOCK_Acceptor.h
                 +--- SOCK_Acceptor.i
                 +--- SOCK_Connect.h
                 +--- SOCK_Connect.i
                 +--- SOCK_Connector.h
                 +--- SOCK_Connector.i
                 +--- SOCK_Dgram.h
                 +--- SOCK_Dgram.i
                 +--- SOCK_IO.h
                 +--- SOCK_IO.i
                 +--- SOCK_Stream.h
                 +--- SOCK_Stream.i
                 +--- Time_Value.h
                 +--- Time_Value.inl
                 +--- Trace.h
                 +--- ace_wchar.h
                 +--- ace_wchar.inl
                 +--- config-all.h
                 +--- config-win32-common.h
                 +--- config-win32-msvc-6.h
                 +--- config-win32-msvc.h
                 +--- config-win32.h
                 +--- config.h
                 +--- post.h
                 +--- pre.h
                 +--- streams.h
                          :

OCI版ACE/TAOをインストールする

TAOの商用サポートを行っているOCI(Object Computing, Inc.)社がリリースしているOCI版のACE/TAO 1.2aをインストールする。

入手ファイル

OCI版TAOのページより、以下のファイルをダウンロードする。

  1. ACE+TAO-1.2a.tar.gz

ビルド

  1. ACEの個別ビルド
  2. TAOの個別ビルド
  3. ACEとTAOをまとめてビルド

の3種類がある。

1.ACEのビルド

ACE_ROOT\ace\config.hファイルの作成
次の1行を記述する。
    #include "ace/config-win32.h"
    
ACE_ROOT\ace\ace.dswをVC++で開く
バッチビルドを実行

2.TAOのビルド

IDLディレクトリパスの設定
VC++の[ツール]メニューの[オプション]で開くダイアログの[ディレクトリ]タ ブから、[表示するディレクトリ]を「実行可能ファイル」とし、そこへ以下のパスを追加する。
ACE_ROOT\TAO\tao\tao.dswをVC++で開く
バッチビルドを実行

3.ACE/TAOの全ビルド

前述のように個々にビルドしなくても、一つのプロジェクトファイルで全てをビルドすることも可能である。次のどちらかである。

ビルド後の不要ファイルの削除

フルにビルドすると、ディスク容量として約1.4GBを必要とする。そこで、TAOを利用するアプリケーションにとって必要なファイルのみを入れる方法を検討する。

Visual C++の中間生成物を削除する

まず、コンパイル中間ファイルを削除する。Visual C++の中間ファイルは、*.obj *.pch vc60.idb vc60.pdbなどである。Cygwinをいれていれば、findコマンドで簡単に削除できる。

$ find ACE_wrappers -type f \( -name "*.obj" -o -name "*.pch" -o -name "vc60.*"
 -o -name "*.ilk" -o -name "*.map" \) -print|xargs rm
$

この結果、ディレクトリサイズは、546MBに削減された。

必要なもののみインストールする

必要なファイルだけを別ディレクトリに切り出してみる。

ACE_Wrappers
      +------ ace
      |

Visual C++メモ

Visual C++を使った開発について

参考URL
  1. チーム開発でのワークスペースの使用方法