[ C++で開発 ]

ACEインストール

The ADAPTIVE Communication Environment(略称:ACE)は、ソース公開されているオブジェクト指向ネットワークプログラミング用のC++フレームワークです。インストールにはソースからビルドすることになります。事前にビルド済みのバイナリは、ACEの商用サポートを行っている会社(Riverace)から購入することもできます。

ACEソース構成

ACE-5.4

ACEには、いくつかのコンポーネントが含まれています。全てのコンポーネントを必要とするわけではないので、必要なものをチョイスしてビルドすることになります。

ACEコンポーネント一覧表
コンポーネント名 ディレクトリ 内容
ace ACE_wrappers/ace ACEのコアなので必須
QoS ACE_wrappers/ace/QoS ASE QoS API。Windows上ではMicrosoft GQOS APIを使用し、UNIX上ではRSVP APIを使用している。
SSL ACE_wrappers/ace/SSL SSLによるSocketを扱う。
RMCast ACE_wrappers/protocols/ace/RMCast 小規模な信頼性あるマルチキャストプロトコル
TMCast ACE_wrappers/protocols/ace/TMCast トランザクション指向マルチキャストプロトコル
HTBP ACE_wrappers/protocols/ace/HTBP 双方向HTTPトネリングプロトコル
ACEXML ACE_wrappers/ACEXML XMLパーサ・フレームワーク(SAX2.0)
ASNMP ACE_wrappers/ASNMP ACE+SNMP!(Another SNMP API)
PACE ACE_wrappers/PACE POSIX ACE. 軽量化。POSIX.1様の下位インタフェースでCで記述している。
netsvcs ACE_wrappers/netsvcs 名前サービス、ロギングサービス、時刻サービス、排他サービスといったネットワークサービスを提供する
websvcs ACE_wrappers/websvcs Webクライアント/サーバ構築に役立つクラス
Gateway ACE_wrappers/apps/Gateway コネクション指向のアプリレベルで発信元もしくは宛先に基づくルーティングを行うGateway
JAWS ACE_wrappers/apps/JAWS ACEで書かれた高性能HTTP Webサーバ
JAWS2 ACE_wrappers/apps/JAWS2
JAWS3 ACE_wrappers/apps/JAWS3
FaCE ACE_wrappers/apps/FaCE PocketPC2002上のテスト・デバッグフレームワーク
drwho ACE_wrappers/apps/drwho 分散RWHO
gperf ACE_wrappers/apps/gperf IDLコンパイラ等が使用するGNU perfect hash function generator

OpenSSL

ACEのSSLコンポーネントをビルドするには、OpenSSLが別途必要です。

インストール手順概要

ACEをインストールする手順は大まか以下のようになります。

  1. ACEソースコードの入手
  2. ACEソースコードの展開
  3. config.hの編集
  4. platform.macros.GNUの作成
  5. コンパイル・リンク
  6. インストール

1. ACEソースコードの入手

ACEは以下のWebサイトでソースコードが公開されています。

[Obtaining ACE]のリンクをたどると、各種アーカイブ形式のファイルがHTTP/FTPでダウンロードできるページになります。ACE単独のものと、ACE+TAO(TAOはACEを利用したCORBA実装)のものがあります。ACEだけインストールするなら前者、合わせてTAOもインストールするなら後者を入手します。
ACE自身もクロスプラットフォームなソースコードなので、サポートされるどのOSもすべてこの一つのソースからビルドされます。

2. ACEソースコードの展開

作業用ディレクトリに1.で入手したソースコードのアーカイブを展開します。

Windowsにおけるアーカイブの問題点

Windows用にフリーのアーカイブツール(解凍ツール)がいくつもでていますが、TAR形式を正しく展開できるものは少ないようです(少なくても僕は知らない)。かなり深いディレクトリ構造のアーカイブの場合、エラーになったりあるいは正しく展開できないという問題があります。そこで、Windowsでアーカイブを展開するときは、ZIP形式のアーカイブを入手するか、GNU tarツールのWindows版(例えばCygwin)を使用します。
ただ、ZIP形式はGZIPやBZIP2形式に比べて圧縮効率が悪いのでファイルサイズが大きくなるなります。

3. config.hの編集

ACEフレームワークでは、実行するプラットフォームに関する情報をconfig.hに集約して扱います。これはACEのビルド時だけでなく、ACEライブラリ/フレームワークを使用する時にも必要です。そのOS・環境でどのような特性をサポートしているかを指定するシンボル定義の集まりです。

4. platform.macros.GNUの編集

コンパイラのコマンド、オプション、ライブラリの位置などが記述されるファイルです。

5. コンパイル・リンク

ACEのソースをビルドします。

6. インストール

ACEをライブラリとしてプログラム開発で使用できるようにします。5.でコンパイル・リンクした際のディレクトリをそのまま使用してもいいですが、不要なファイルもたくさんあるので必要なファイルだけを抜き出します。

インストールWindows編

Windows上でACEをビルドするには、C++コンパイラが必要です。現在以下のコンパイラに対応しています。

Visual C++ 6.0

あらかじめ、Visual C++用プロジェクトファイルがソースと一緒に配布されています。これを用いれば簡単にインストールすることができます。

1. ACEの入手

上述のとおりACEのソースを入手します。

2. ソースの展開

作業ディレクトリとして仮にF:\tmpの下に展開します。

torutk$ cd /cygdrive/f/tmp
tmp$ tar xvjf ACE.tar.bz2
 :
tmp$ ls -F
ACE_wrappers/
tmp$ 

3. config.hの編集

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

ACE_wrappers\ace\config.hの記述
// -*- C++ -*-
#ifndef ACE_CONFIG_H
#define ACE_CONFIG_H

//#define ACE_HAS_WINNT4 0
//#define ACE_HAS_MFC 1
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
//#define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
#define ACE_HAS_ANSI_CASTS 1
#include "ace/config-win32.h"

#endif /* ACE_CONFIG_H */
#define ACE_HAS_WINNT4 0
Windows 95/98で実行できるようにします。Windows 95/98で実行しないなら記述する必要はありません(コメントアウトしています)。
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
STLを含めたC++標準ライブラリを使用します。またC++標準に従ったインクルードファイルを使用します。(例えば<stdio.h>ではなく<cstdio>をインクルードするなど)
#define ACE_HAS_ANSI_CASTS 1
C++キャスト(dynamic_cast, static_cast, reinterpret_cast, const_cast)の使用を有効にします。この場合コンパイル時にRTTIが必要になります。Visual C++のウィザードが生成するデフォルトプロジェクト設定ではRTTIが有効になっていないので、この定義を有効にする場合は手動でプロジェクト設定を変更する必要があります。
#define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
標準C++ライブラリを有していて、それが名前空間std内に定義されている場合に指定します。Visual C++ 6.0用デフォルト設定で有効になっています。

ここで記述していないシンボル

ACE_HAS_MFC
MFCとともにACEライブラリを使用する場合は定義します。これを定義すると、たとえMFCを使用しない場合でも必ずMFCへのリンクがあるため依存が発生してしまう。また、ACEのmfc版ビルドの際はこの定義がプロジェクト設定で付加されている。そこで、このシンボルは使用しない。

4. platform_macros.GNUの編集

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

5. コンパイル・リンク

ace.dswのビルド

VC++で次のワークスペースファイルを開きます。

    ACE_wrappers\ace\ace.dsw

このワークスペースファイルには、以下のプロジェクト構成が含まれています。

aceコア用プロジェクト設定一覧
プロジェクト名 設定名 内容
ACE DLL Win32 MFC Release MFC対応用ACE DLL。ACE内部でのスレッド生成にCWinThreadを使用する。
Win32 MFC Debug
Win32 Release
Win32 Debug
ACE LIB Win32 Pharlap ETS Static Release 旧Phar Lap社のWin32ハードリアルタイムOS用
(ETS:Embedded ToolSuit)
Win32 Pharlap ETS Static Debug
Win32 Static Release
Win32 Static Debug

Windows用としては、上記設定のうちPharlap ETSを除いた6つをビルドします。

RTTIを有効にする

3.のconfig.hの編集で、ACE_HAS_ANSI_CASTSを有効にした場合、プロジェクト設定に追加を行います。[プロジェクト]メニューから[設定]を選ぶと、プロジェクトの設定ダイアログが表示されます。設定の対象欄で[すべての構成]を選び、ACE DLLとACE LIBの両方を選択状態にします。次に右側のC/C++タブを選び、カテゴリ欄を[C++言語]に指定し、[ランタイムタイプ情報(RTTI)を有効にする]をチェックします。

バッチビルドの実行

ビルドを開始します。[ビルド]メニューから[バッチビルド]を選択し、Pharlap ETS用を除いた6つの設定を選択した状態で[ビルド]を実行します。

ビルドにかかった時間は、Pentium III 500MHzのPCで1時間強です。
Athlon 2500+(実クロック1.8GHz)のPCでは14分です。

aceコア生成ライブラリ名(Visual C++)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
Win32 MFC Release ACE_wrappers\bin\acemfc.dll ACE_wrappers\ace\acemfc.lib
Win32 MFC Debug ACE_wrappers\bin\acemfcd.dll ACE_wrappers\ace\acemfcd.lib
Win32 Release ACE_wrappers\bin\ace.dll ACE_wrappers\ace\ace.lib
Win32 Debug ACE_wrappers\bin\aced.dll ACE_wrappers\ace\aced.lib
Win32 Static Release ACE_wrappers\ace\aces.lib
Win32 Static Debug ACE_wrappers\ace\acesd.lib

gperf.dswのビルド

TAOのIDLコンパイラなどでgperfコマンドを使用します。なお、Cygwinに含まれるgperfではコマンドラインオプション等の違いでうまく利用できません。(環境変数PATHにCygwinの実行ファイルが含まれているとCygwinのgperfが呼び出されます。環境変数PATHから除いておくか、VC++の実行可能ディレクトリリストから削除します。)

VC++で次のワークスペースファイルを開きます。

    ACE_wrappers\apps\gperf\src\gperf.dsw

このワークスペースファイルには、以下のプロジェクト構成が含まれています。コマンドとして呼び出すので、設定が簡単なスタティックリンクを使用します。デバッグビルドは不要なのでリリースビルド(Win32 Static Release)だけ構築します。

3.のconfig.hの編集で、ACE_HAS_ANSI_CASTSを有効にした場合、プロジェクト設定でRTTIを有効にします。

gperf用プロジェクト設定一覧
プロジェクト名 設定名 内容
gperf Win32 Release
Win32 Debug
Win32 Static Release
Win32 Static Debug

Win32 Static Releaseのビルドが成功すると、以下のファイルが生成されます。

    ACE_wrappers\bin\Release\gperf.exe

ACE_QoS.dswのビルド

QoS機能が使用できるようになります。

VC++で次のワークスペースファイルを開きます。

    ACE_wrappers\ace\QoS\ACE_QoS.dsw

このワークスペースファイルには、以下のプロジェクト構成が含まれています。

ACE_QoS用プロジェクト設定一覧
プロジェクト名 設定名 内容
ACE_QoS DLL Win32 Release
Win32 Debug
ACE_QoS LIB Win32 Static Release
Win32 Static Debug

ビルドが成功すると、以下のファイルが生成されます。

ACE_QoS生成ライブラリ名(Visual C++)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
Win32 Release ACE_wrappers\bin\ACE_QoS.dll ACE_wrappers\ace\QoS\ACE_QoS.lib
Win32 Debug ACE_wrappers\bin\ACE_QoSd.dll ACE_wrappers\ace\QoS\ACE_QoSd.lib
Win32 Static Release ACE_wrappers\ace\QoS\ACE_QoSs.lib
Win32 Static Debug ACE_wrappers\ace\QoS\ACE_QoSsd.lib

RMCast.dswのビルド

リアルタイム・マルチキャスト通信が使用できるようになります。

VC++で次のワークスペースファイルを開きます。

    ACE_wrappers\ace\RMCast\RMCast.dsw

このワークスペースファイルには、以下のプロジェクト構成が含まれています。

RMCast用プロジェクト設定一覧
プロジェクト名 設定名 内容
RMCast Win32 Release
Win32 Debug

ビルドが成功すると、以下のファイルが生成されます。

RMCast生成ライブラリ名(Visual C++)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
Win32 Release ACE_wrappers\bin\ACE_RMCast.dll ACE_wrappers\ace\RMCast\ACE_RMCast.lib
Win32 Debug ACE_wrappers\bin\ACE_RMCastd.dll ACE_wrappers\ace\RMCast\ACE_RMCastd.lib

ACE_SSL_LIB.dswのビルド

SSLを使った通信ができるようになります。SSLにはACEとは別途OpenSSLが必要になります。OpenSSLのインストールを参照ください。VC++でビルド済みのバイナリも置いています。インストールページにリンクがあります。

OpenSSLのインクルード・ライブラリファイルをVC++から参照できるように、以下の設定を行います。

システム全体で設定する場合の追加事項
設定項目 設定個所 追加内容
インクルードファイルのパス [ツール]→[オプション]→[ディレクトリ]タブ→インクルードファイル d:\lib\openssl\include
ライブラリのパス [ツール]→[オプション]→[ディレクトリ]タブ→ライブラリファイル d:\lib\openssl\lib

VC++で次のワークスペースファイルを開きます。

    ACE_wrappers\ace\SSL\ACE_SSL_LIB.dsw

このワークスペースファイルには、以下のプロジェクト構成が含まれています。

ACE_SSL用プロジェクト設定一覧
プロジェクト名 設定名 内容
ACE_SSL Win32 Release ACE_SSLのDLL構築プロジェクト
Win32 Debug
ACE_SSL_LIB Win32 Release ACE_SSLのスタティックリンクライブラリ構築プロジェクト
Win32 Debug

ビルドが成功すると、以下のファイルが生成されます。

RMCast生成ライブラリ名(Visual C++)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
Win32 Release ACE_wrappers\bin\ACE_SSL.dll ACE_wrappers\ace\SSL\ACE_SSL.lib
Win32 Debug ACE_wrappers\bin\ACE_SSLd.dll ACE_wrappers\ace\SSL\ACE_SSLd.lib
Win32 (Static) Release ACE_wrappers\ace\SSL\ACE_SSLs.lib
Win32 (Static) Debug ACE_wrappers\ace\QoS\ACE_SSLsd.lib

netsvcs.dswのビルド

分散環境で名前サービス、時刻サービス、ロギングサービス、排他サービスなどを提供する部品です。

VC++で次のワークスペースファイルを開きます。

    ACE_wrappers\netsvcs\lib\netsvcs.dsw

このワークスペースファイルには、以下のプロジェクト構成が含まれています。

netsvcs用プロジェクト設定一覧
プロジェクト名 設定名 内容
NETSVCS Library Win32 Release
Win32 Debug

ビルドが成功すると、以下のファイルが生成されます。

netsvcs生成ライブラリ名(Visual C++)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
Win32 Release ACE_wrappers\bin\netsvcs.dll ACE_wrappers\netsvcs\netsvcst.lib
Win32 Debug ACE_wrappers\bin\netsvcsd.dll ACE_wrappers\netsvcs\netsvcsd.lib

netsvcsライブラリを使用したサーバやクライアントの実装例が提供されています。プログラミング方法についてはこれらを見るとよいでしょう。

netsvcs実装例プロジェクト一覧
プロジェクト名 場所 内容
NETSVCS
Direct Logging Client
ACE_wrappers\netsvcs\clients\Logger\Logger.dsw ロギングサービスを利用するクライアントのテストプログラム。クライアントが直接ロギングサービスと通信する場合を例示。
NETSVCS
Indirect Logging Client
ロギングサービスを利用するクライアントのテストプログラム。クライアント側にロギングデーモンを置き、デーモンがロギングサービスへ転送する場合を例示。
NETSVCS
Naming Client DLL
ACE_wrappers\netsvcs\clients\Naming\Client\Client.dsw
NETSVCS
Naming Client Test
NETSVCS Servers ACE_wrappers\netsvcs\servers\servers.dsw
NETSVCS Token
Collection Client
ACE_wrappers\netsvcs\clients\Tokens\collection\collection.dsw
NETSVCS Token
Deadlock Client
ACE_wrappers\netsvcs\clients\Tokens\deadlock\deadlock.dsw
NETSVCS Token
Invariant Client
ACE_wrappers\netsvcs\clients\Tokens\invariant\invariant.dsw
NETSVCS Token
Manual Client
ACE_wrappers\netsvcs\clients\Tokens\manual\manual.dsw
NETSVCS Token
Mutex Client
ACE_wrappers\netsvcs\clients\Tokens\mutex\mutex.dsw
NETSVCS Token
RW_Lock Client
ACE_wrappers\netsvcs\clients\Tokens\rw_lock\rw_lock.dsw

サンプルをビルドすると、以下のファイルが生成されます。

netsvcsサンプル例示用プロジェクト生成物一覧
プロジェクト名 設定名 内容
NETSVCS
Direct Logging Client
Win32 Release ACE_wrappers\netsvcs\clients\Logger\Release\direct_logging.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Logger\direct_logging.exe
NETSVCS
Indirect Logging Client
Win32 Release ACE_wrappers\netsvcs\clients\Logger\Release\indirect_logging.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Logger\indirect_logging.exe
NETSVCS
Naming Client DLL
Win32 Release [DLL]ACE_wrappers\bin\Client_Test.dll
[インポート]ACE_wrappers\ace\netsvcs\clients\Naming\ClientClient_Test.lib
Win32 Debug [DLL]ACE_wrappers\bin\Client_Testd.dll
[インポート]ACE_wrappers\ace\netsvcs\clients\Naming\ClientClient_Testd.lib
NETSVCS
Naming Client Test
Win32 Release ACE_wrappers\netsvcs\clients\Naming\Client\Release\main.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Naming\Client\main.exe
NETSVCS Servers Win32 Release ACE_wrappers\netsvcs\servers\Release\main.exe
Win32 Debug ACE_wrappers\netsvcs\servers\main.exe
NETSVCS Token
Collection Client
Win32 Release ACE_wrappers\netsvcs\clients\Tokens\collection\Release\collection.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Tokens\collection\collection.exe
NETSVCS Token
Deadlock Client
Win32 Release ACE_wrappers\netsvcs\clients\Tokens\deadlock\Release\deadlock.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Tokens\deadlock\deadlock.exe
NETSVCS Token
Invariant Client
Win32 Release ACE_wrappers\netsvcs\clients\Tokens\invariant\Release\invariant.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Tokens\invariant\invariant.exe
NETSVCS Token
Manual Client
Win32 Release ACE_wrappers\netsvcs\clients\Tokens\manual\Release\manual.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Tokens\manual\manual.exe
NETSVCS Token
Mutex Client
Win32 Release ACE_wrappers\netsvcs\clients\Tokens\mutex\Release\mutex.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Tokens\mutex\mutex.exe
NETSVCS Token
RW_Lock Client
Win32 Release ACE_wrappers\netsvcs\clients\Tokens\rw_lock\Release\rw_lock.exe
Win32 Debug ACE_wrappers\netsvcs\clients\Tokens\rw_lock\rw_lock.exe

6. インストール

ACEを展開してビルドしたまま利用してもよいのですが、そのままでは500MB位ディスクを食っているので、ACEを利用するのに必要なファイルだけを抜き出して別なディレクトリにインストールします。
以下、D:\lib\aceディレクトリ下にインストールする場合です。

D:\lib\ace
       +--- bin             実行ファイル、DLLファイルを格納 
       +--- include         ヘッダファイル等を格納
       |     +--- ace       ACEのヘッダファイルを格納
       |     +--- netsvcs   netsvcsヘッダファイルを格納
       +--- lib             リンク時に必要なライブラリファイルを格納

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

ACE_wrappers\aceの中にあるヘッダファイル(*.h)をコピーします。なお、ヘッダファイルの中でインクルードされているファイルが幾種類かあります。例えば、*.i、*.inl、*.cppなどです。これらも一緒にコピーする必要があります。安直な方法は、拡張子*.i、*.inl、*.cppを全てインストール先にコピーします。

安直なコピーによるインストール

tmp$ cd ACE_wrappers/ace
ace$ cp *.h /cygdrive/d/lib/ace/include/ace/
ace$ cp *.i /cygdrive/d/lib/ace/include/ace/
ace$ cp *.inl /cygdrive/d/lib/ace/include/ace/
ace$ cp *.cpp /cygdrive/d/lib/ace/include/ace/
ace$

これでは不要なファイル(特に*.cppファイル)もコピーされてしまいます。そこで必要なファイルだけをコピーする方法を考えます。
ヘッダファイルのうち、Windows以外のプラットフォーム用config-*.hは不要なのでコピーしません。
*iと*inlは全てコピーします。
*.cppファイルは、ヘッダファイル内で#include指令で記述されているものだけが必要なので、これを引っ掛けてコピーします。判定にはUNIXのfind、grep、awkコマンドを使用していますがあまりきれいではありません。とりあえず、*.cppが302ファイルあるうち67ファイルがコピー対象となりました。

必要なファイルを選別してインストール

tmp$ cd ACE_wrappers/ace
ace$ find . -maxdepth 1 -name "*.h" ! -name "config-[^w]*" \
  -exec cp {} /cygdrive/d/lib/ace/include/ace/ \;
ace$ cp config-all.h *.i *.inl /cygdrive/d/lib/ace/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/ace/include/ace/"}' >copy.list
ace$ sh copy.list
ace$
修正1
最初、grepのパターン指定で "^#include"でチェックしていたが、中に"# include"と'#'と'i'の間に空白が入っていたコードがあり、コピー対象から漏れてしまった。
    # include "Dynamic_Service.cpp"
そこで、grep "#[ ]*include"とパターンを変更した。また、今後#の前に空白が入っていた場合に備えてgrep "^[ ]*#[ ]*include"とパターンを指定することにした。また、その場合、awkでprint $2でファイル名部分を取り出した場合、空白のためにずれてしまっていた。
    # include "Dynamic_Service.cpp"
    ↑ ↑     ↑
    $1  $2         $3
そこで、"をセパレータ(FS)にセットしてsplitで分割してファイル名部分を取り出すようにした。
    #include  "Acceptor.cpp"
    # include "Dynamic_Service.cpp"
       ↑         ↑               ↑
     chank[1]   chank[2]         chank[3]
修正2
ACE5.4の場合、以下の作業を追加する。
ace$ cp config-lite.h /cygdrive/d/lib/ace/include/ace/
ace$ find os_include/ -name "*.h" -print|cpio -pd \ 
  /cygdrive/d/lib/ace/include/ace/
ace$
ACE_QoSのヘッダ
ace$ cd QoS
QoS$ mkdir /cygdrive/d/lib/ace/include/ace/QoS/
QoS$ cp *.h *.i /cygdrive/d/lib/ace/include/ace/QoS/
QoS$

QoSには現在のところ、*.inlはありません。また、*.hから#includeされている*.cppもありません。

RMCastのヘッダ
ace$ cd RMCast
RMCast$ mkdir /cygdrive/d/lib/ace/include/ace/RMCast/
RMCast$ cp *.h *.i /cygdrive/d/lib/ace/include/ace/RMCast/
RMCast$ find . -name "*.h" -print | xargs grep "^[ ]*#[ ]*include" | \
  grep ".cpp" | awk 'FS="\""{split($0, chank); \
  print "cp", chank[2],"/cygdrive/d/lib/ace/include/ace/RMCast/"}' \
  >copy.list
RMCast$ sh copy.list

RMCastには現在のところ、*.inlはありません。

ACE_SSLのヘッダ
ace$ cd SSL
SSL$ mkdir /cygdrive/d/lib/ace/include/ace/SSL/
SSL$ cp *.h *.i *.inl /cygdrive/d/lib/ace/include/ace/SSL/
SSL$ 

SSLには現在のところ、*.hから#includeされている*.cppはありません。

netsvcsのヘッダ

netsvcsはaceとは違うディレクトリにあります。サンプルプログラムを見ると、ヘッダファイルを#includeするときにディレクトリ指定はありません。しかし、d:\lib\ace\include直下におくのも見苦しいので、d:\lib\ace\include\netsvcs以下に置くことにします。プログラムを作成するときは、プリプロセッサのパスにd:\lib\ace\include\netsvcsまでを指定しておく必要があります。

ACE_wrappers$ cd netsvcs/lib
lib$ cp *.h /cygdrive/d/lib/ace/include/netsvcs/
lib$ find . -name "*.h" -print | xargs grep "^[ ]*#[ ]*include" | \
  grep ".cpp" | awk 'FS="\""{split($0, chank); \
  print "cp", chank[2],"/cygdrive/d/lib/ace/include/netsvcs/"}' \
  >copy.list
lib$ sh copy.list
lib$ 

リンク解決用ファイルのコピー

Windowsの共有ライブラリファイル(DLL)は、リンク時に必要なインポートライブラリファイル(*.lib)と実行時に必要なダイナミックリンクライブラリファイル(*.dll)に分かれています。一方、スタティックリンクライブラリファイル(*.lib)は1種類だけです。そこで、リンク解決時に必要なファイルと実行時に必要なファイルをインストールするディレクトリを分けます。なぜならば、実行時に必要なファイルのあるディレクトリは環境変数PATHに含めるからです。

ace$ find . -name "*.lib" -print
./ace.lib
./aced.lib
./acemfc.lib
./acemfcd.lib
./aces.lib
./acesd.lib
./QoS/ACE_QoS.lib
./QoS/ACE_QoSd.lib
./QoS/ACE_QoSs.lib
./QoS/ACE_QoSsd.lib
./RMCast/ACE_RMCast.lib
./RMCast/ACE_RMCastd.lib
./SSL/ACE_SSL.lib
./SSL/ACE_SSLd.lib
./SSL/ACE_SSLs.lib
./SSL/ACE_SSLsd.lib
ace$ find . -name "*.lib" -exec cp {} /cygdrive/d/lib/ace/lib/ \;
ace$ 
netsvcsのライブラリ
ace$ cd ../netsvcs/lib
lib$ ls *.lib
netsvcs.lib  netsvcsd.lib
lib$ cp *.lib /cygdrive/d/lib/ace/lib/
lib$ 

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

Windowsの共有ライブラリファイル(DLL)は、ライブラリを使用するアプリケーションが起動したときに読み込まれます(黙示のリンクの場合)。その際、DLLファイルは環境変数PATHの中から検索されるので、DLLファイルは環境変数PATHで指定するディレクトリに配置します。ここでACEに含まれる実行ファイル等はインストール先(例えばD:\lib\ace)の中にbinという名前のディレクトリを設けてコピーします。

ace$ cd ../bin
bin$ find . \( -name "*.dll" -o -name "*.exe" \) -print
./ace.dll
./aced.dll
./acemfc.dll
./acemfcd.dll
./ACE_QoS.dll
./ACE_QoSd.dll
./ACE_RMCast.dll
./ACE_RMCastd.dll
./ACE_SSL.dll
./ACE_SSLd.dll
./netsvcs.dll
./netsvcsd.dll
./Release/gperf.exe
bin$ find . \( -name "*.dll" -o -name "*.exe" \) \
  -exec cp {} /cygdrive/d/lib/ace/bin \;
bin$ 

バージョンファイルのコピー

ACEがどのバージョンかを示すファイルが1つあるので、これをコピーしておきます。

bin$ cd ..
ACE_wrappers$ ls VERSION
VERSION
ACE_wrappers$ cp VERSION /cygdrive/d/lib/ace
ACE_wrappers$  

環境変数の設定

ACEを利用するアプリケーションでは、伝統的に環境変数ACE_ROOTを使用します。また、DLLファイルを置いたディレクトリを環境変数PATHに追加する必要があります。そこで、この2つの環境変数を設定しておきます。

環境変数名 設定方法 設定内容
ACE_ROOT 新規作成 D:\lib\ace
PATH 追加 %ACE_ROOT%\binを追加する

ACEを使用するアプリケーションを開発する場合、そのプロジェクト設定ファイルにおいてインクルードファイルのパスと追加ライブラリのパスにACEのinclude、libを指定します。

まとめてインストールスクリプト

上記のインストール操作をまとめて実行するスクリプトを用意すると便利です。

<未着手>

VC++ toolkit 2003

マイクロソフトから無償で入手できるVC++ 7.1相当のコンパイラ一式です。詳細はこちらのページにあります。

1.〜4.はVC++6.0と同じ

Borland C++ 5.5.1

Borland C++は、製品版のBorland C++/C++ Builderと無償のBorland C++ Compilerがあります。ここでは無償のBorland C++ Compilerを使ってACEをビルドします。

1. ACEの入手

上述のとおりACEのソースを入手します。

2. ソースの展開

作業ディレクトリとして仮にF:\tmpの下に展開します。

3. config.hの編集

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

ACE_wrappers\ace\config.hの記述
// -*- C++ -*-
#ifndef ACE_CONFIG_H
#define ACE_CONFIG_H

//#define ACE_HAS_WINNT4 0
#include "ace/config-win32.h"

#endif /* ACE_CONFIG_H */
#define ACE_HAS_WINNT4 0
Windows 95/98で実行できるようにします。Windows 95/98で実行しないならコメントアウトします。

Visual C++の場合に指定したACE_HAS_ANSI_CASTSやACE_HAS_STANDARD_CPP_LIBRARYなどはデフォルトで有効になっています。Borlad C++の方がC++標準規格への準拠度が高いからでしょう。

4. platform_macros.GNUの編集

Borland C++の場合は不要です。

5. コンパイル・リンク

環境変数ACE_ROOTとBCBVERを設定します。

F:\tmp>set ACE_ROOT=F:\tmp\ACE_wrappers
F:\tmp>set BCBVER=5
F:\tmp>  

もしACE_SSLをビルドするならば、環境変数SSL_ROOTを設定します。

※Borland C++でOpenSSLのビルドに失敗しているので、この設定は行ってません。

ビルド種類の使い分けは、makeに渡すオプションで指定します。

UNICODE
unicodeバージョンのACEを作成
DEBUG
デバッグバージョンのACEを作成
STATIC
スタティックリンクライブラリを作成(指定しない場合はDLLを作成)

リリースビルドのDLLを作成

F:\tmp>cd ACE_wrappers
F:\tmp\ACE_wrappers>cd ace
F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DUNICODE
    :
F:\tmp\ACE_wrappers\ace>

次の場所にファイルが生成されます。

デバッグビルドのDLLを作成

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DDEBUG -DUNICODE
    :
F:\tmp\ACE_wrappers\ace>

リリースビルドのスタティックリンクライブラリを作成

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DSTATIC -DUNICODE
    :
F:\tmp\ACE_wrappers\ace>

デバッグビルドのスタティックリンクライブラリを作成

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DDEBUG -DSTATIC -DUNICODE
    :
F:\tmp\ACE_wrappers\ace>
aceコア生成ライブラリ名(Borland C++)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
DLL Release ACE_wrappers\bin\Dynamic\Release\Unicode\ace_bu.dll
ACE_wrappers\bin\Dynamic\Release\Unicode\ace_QoS_bu.dll
ACE_wrappers\bin\Dynamic\Release\Unicode\ace_RMCast_bu.dll
ACE_wrappers\bin\Dynamic\Release\Unicode\ace_bu.lib
ACE_wrappers\bin\Dynamic\Release\Unicode\ace_QoS_bu.lib
ACE_wrappers\bin\Dynamic\Release\Unicode\ace_RMCast_bu.lib
DLL Debug ACE_wrappers\bin\Dynamic\Debug\Unicode\ace_bud.dll
ACE_wrappers\bin\Dynamic\Debug\Unicode\ace_QoS_bud.dll
ACE_wrappers\bin\Dynamic\Debug\Unicode\ace_RMCast_bud.dll
ACE_wrappers\bin\Dynamic\Debug\Unicode\ace_bud.lib
ACE_wrappers\bin\Dynamic\Debug\Unicode\ace_QoS_bud.lib
ACE_wrappers\bin\Dynamic\Debug\Unicode\ace_RMCast_bud.lib
Static Release ACE_wrappers\bin\Static\Release\Unicode\ace_bsu.lib
ACE_wrappers\bin\Static\Release\Unicode\ace_QoS_bsu.lib
ACE_wrappers\bin\Static\Release\Unicode\ace_RMCast_bsu.lib
Static Debug ACE_wrappers\bin\Static\Debug\Unicode\ace_bsud.lib
ACE_wrappers\bin\Static\Debug\Unicode\ace_QoS_bsud.lib
ACE_wrappers\bin\Static\Debug\Unicode\ace_RMCast_bsud.lib

Borland C++用Makefileの場合、ACEのコアコンポーネントに加えて、ACE QoS、ACE RMCastのコンポーネントも生成されています。

6. インストール

ACEを利用するのに必要なファイルだけを抜き出して別なディレクトリにインストールします。Borland C++用のMakefileには、インストール処理も記述されているので、makeを実行すればインストール作業が行えます。
以下、D:\lib\aceディレクトリ下にインストールする場合です。

D:\lib\ace
       +--- bin         実行ファイル、DLLファイルを格納 
       +--- include     ヘッダファイル等を格納
       |     +--- ace   
       +--- lib         リンク時に必要なライブラリファイルを格納

リリースビルドのDLLをインストール

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DUNICODE \
  -DINSTALL_DIR=D:\lib\ace install
    :
F:\tmp\ACE_wrappers\ace>

デバッグビルドのDLLをインストール

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DDEBUG -DUNICODE \
  -DINSTALL_DIR=D:\lib\ace install
    :
F:\tmp\ACE_wrappers\ace>

リリースビルドのスタティックリンクライブラリをインストール

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DSTATIC -DUNICODE \
  -DINSTALL_DIR=D:\lib\ace install
    :
F:\tmp\ACE_wrappers\ace>

デバッグビルドのスタティックリンクライブラリをインストール

F:\tmp\ACE_wrappers\ace>make -f Makefile.bor -DDEBUG -DSTATIC -DUNICODE \
  -DINSTALL_DIR=D:\lib\ace install
    :
F:\tmp\ACE_wrappers\ace>

バージョンファイルのコピー

ACEがどのバージョンかを示すファイルが1つあるので、これをコピーしておきます。

F:\tmp\ACE_wrappers\ace> cd ..
F:\tmp\ACE_wrappers>copy VERSION D:\lib\ace
        1 個のファイルをコピーしました。
F:\tmp\ACE_wrappers>

GNU MinGW

Cygwin

Cygwinは、Windows上でUNIXのAPIをエミュレーションする環境です。エミュレーション上に各種UNIXツールが移植されています。GCCも移植されているので、ここではCygwin上でGCCを使ってACEをビルドします。

最近はCygwinのビルド環境が整備されているので、容易にビルドすることができるようになりました。

ビルドした際のCygwin環境
Cygwin環境 バージョン
Cygwin
~$ uname -r
1.5.18(0.132/4/2)
GCC
~$ g++ --version
g++ (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
:
make
~$ make --version
GNU Make 3.80
:

1. ACEの入手

上述のとおりACEのソースを入手します。

2. ソースの展開

作業ディレクトリとして仮に/tmpの下に展開します。

3. config.hの編集

/tmp/ACE_wrapers/ace/config.h ファイルを新規に作成します。

ACE_wrappers/ace/config.hの記述
// -*- C++ -*-
#ifndef ACE_CONFIG_H
#define ACE_CONFIG_H

#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#include "ace/config-cygwin32.h"

#endif /* ACE_CONFIG_H */
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
STLを使います。

4. platform_macros.GNUの編集

/tmp/ACE_wrapers/include/makeinclude/platform_macros.GNU ファイルを新規に作成します。

ACE_wrappers/include/makeinclude/platform_macros.GNUの記述
include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU

5. コンパイル・リンク

環境変数ACE_ROOT、環境変数LD_LIBRARY_PATHを設定します。

tmp$ export ACE_ROOT=/tmp/ACE_wrappers
tmp$ export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
tmp$ cd $ACE_ROOT/ace
ace$ make
  :
ace$

makeはデフォルトではACEコアとRMCastをビルドする設定になっています。

makeのオプション 内容 備考
ssl=1 ACE_SSLをビルドする Cygwin用のOpenSSLをインストールしておく。なお、ACE_SSLはコンパイルエラー発生
rmcast=0 ACE_RMCastをビルドしない
optimize=1 最適化オプション(-O3)を追加する
debug=0 デバッグオプション(-g)を削除する
rapi=1 ACE_QoSをビルドする。(RAPIライブラリが必要) Cygwin用のRAPIライブラリが見当たらない
static_libs=1 スタティックリンクライブラリを作成する
shared_libs=0 DLLをビルドしない
TCPU=pentium 生成するバイナリはPentium用とする
{ pentiumpro | pentium | i486 | i386 }
デフォルトはpentiumpro
repo=1

Cygwinは、netinstallにおいてOpenSSLを提供しています。これをCygwin環境にインストールしてあれば、ACE_SSLのビルドが可能です。

aceコア生成ライブラリ名(Cygwin)
設定名 静的/動的ライブラリファイル インポートライブラリファイル
make ACE_wrappers/ace/libACE.dll
ACE_wrappers/ace/RMCast/libRMCast.dll
ACE_wrappers/ace/libACE.dll.a
ACE_wrappers/ace/RMCast/libRMCast.dll.a

gperfのビルド

ACE_wrappers$ cd apps/gperf/src
src$ make 
  :
src$

6. インストール

以下、/usr/localディレクトリ下にインストールする場合です。

/usr/local/
       +--- bin             ACEのDLLはここに格納
       +--- include         
       |     +--- ace       ACEのヘッダファイルを格納
       +--- lib             
             +--- ace    ACEインポートライブラリを格納

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

ACE_wrappers$ cd ace
ace$ cp *.h *.i *.inl /usr/local/include/ace/
ace$ 

ライブラリをインストール

ace$ cp libACE.dll /usr/local/lib/ace/ 
ace$

インストールWindowsCE編

eMbedded C++ 3.0

インストールLinux編

GCC 2.95.2

Debian GNU/Linux 3.0(Woody) for PowerPC にインストールした際の手順です。

GCCとmakeのバージョンは以下

work$ g++ -v
Reading specs from /usr/lib/gcc-lib/powerpc-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)
work$ make -v
GNU Make version 3.79.1, by Richard Stallman and Roland McGrath.
Built for powerpc-unknown-linux-gnu
Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
        Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

Report bugs to <bug-make@gnu.org>.

1. ACEの入手

上述のとおりACEのソースを入手します。

2. ソースの展開

作業ディレクトリとして仮に/tmpの下に展開します。

3. config.hの編集

/tmp/ACE_wrapers/ace/config.h ファイルを新規に作成します。Linux用に用意されているconfig-linux.hへのシンボリックリンクとして作成します。

work$ cd ACE_wrappers/ace
ace$ ln -s config-linux.h config.h
ace$ 

4. platform_macros.GNUの編集

/tmp/ACE_wrapers/include/makeinclude/platform_macros.GNU ファイルを新規に作成します。Linux用に用意されているplatform_linux.GNUへのシンボリックリンクとして作成します。

ace$ cd ../include/makeinclude
makeinclude$ ln -s platform_inux.GNU platform_macros.GNU
makeinclude$ 

5. コンパイル・リンク

環境変数ACE_ROOT、環境変数LD_LIBRARY_PATHを設定します。

makeinclude$ cd ../..
ACE_wrappers$ export ACE_ROOT=`pwd`
ACE_wrappers$ echo $ACE_ROOT
/tmp/ACE_wrappers
ACE_wrappers$ 
ACE_wrappers$ export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
ACE_wrappers$ echo $LD_LIBRARY_PATH
/tmp/ACE_wrappers/ace:
ACE_wrappers$ 

makeを実行します。

ACE_wrappers$ cd ace
ace$ make
 

ビルドされたライブラリは次のとおりです。

aceコア生成ライブラリ名(Linux)
設定名 共有ライブラリファイル
make
ACE_wrappers/ace/libACE.so.5.3.1
ACE_wrappers/ace/RMCast/libACE_RMCast.so.5.3.1

libACE_RMCast.so.5.3.1は、ace/RMCastの下に実体がありますが、aceの下にシンボリックリンクファイルが作成されます。シンボリックリンクファイルを含めると以下のように共有ライブラリファイルが生成されます。

ACE_wrappers/ace
      +--- libACE.so -> libACE.so.5.3.1
      +--- libACE.so.5.3.1
      +--- libACE_RMCast.so -> ACE_wrappers/ace/RMCast/libACE_RMCast.so.5.3.1
      +--- libACE_RMCast.so.5.3.1 -> ACE_wrappers/ace/RMCast/libACE_RMCast.so.5.3.1
      +--- RMCast
             +--- libACE_RMCast.so -> libACE_RMCast.so.5.3.1
             +--- libACE_RMCast.so.5.3.1

gperfのビルド

ACE_wrappers$ cd apps/gperf/src
src$ make 
  :
src$

メモ

g++はコンパイル過程で生成する中間ファイルをデフォルトでは.shobjというディレクトリの中に吐きます。

6. インストール

以下、/usr/localディレクトリ下にインストールする場合です。

/usr/local/
       +--- bin             ACEの実行ファイルはここに格納
       +--- include         
       |     +--- ace       ACEのヘッダファイルを格納
       +--- lib             
             +--- ace    ACEの共有ライブラリファイルを格納

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

ACEコアのヘッダ
ACE_wrappers$ cd ace
ace$ find . -maxdepth 1 -name "*.h" ! -name "config*" \
  -exec cp {} /usr/local/include/ace/ \;
ace$ cp config.h config-all.h config-linux* config-g++* /usr/local/include/ace/
ace$ cp *.i *.inl /usr/local/include/ace/
ace$
RMCastのヘッダ
ace$ cd RMCast
RMCast$ mkdir /usr/local/include/ace/RMCast/
RMCast$ cp *.h *.i /usr/local/include/ace/RMCast/
RMCast$ 

RMCastには現在のところ、*.inlはありません。

ライブラリをインストール

UNIXでは、共有ライブラリファイルはバージョン番号付きのファイル名で作成し、リンクするファイル名はいずれかのバージョン番号付きの共有ライブラリファイルへのシンボリックリンクとすることが多いです。

ファイル名 ファイル種類
libACE.so
シンボリックリンクファイル(リンク先:libACE.so.5.3.1)
libACE.so.5.3.1
共有ライブラリファイル

このようにすれば、複数のバージョンの共有ライブラリファイルを同じディレクトリに置いておくことができ、プログラム開発時や実行時はシンボリックリンクファイルを参照するようにし、バージョンアップ毎の修正は不要となります。

ACEコアのライブラリ
ace$ cp libACE.so.5.3.1 /usr/local/lib/ace/ 
ace$ ln -s ./libACE.so.5.3.1 /usr/local/lib/ace/libACE.so
RMCastのライブラリ
ace$ cd RMCast
RMCast$ cp libACE_RMCast.so.5.3.1 /usr/local/lib/ace/
RMCast$ ln -s ./libACE_RMCast.so.5.3.1 /usr/local/lib/ace/libACE_RMCast.so
RMCast$
手作業でコピー&シンボリックリンク作成は面倒なので、スクリプトを作って実行します
ace$ ls libACE*.so.5.3.1 | \
  sed 's|\(lib.*.so\)\(.5.3.1\)|cp \1\2 /usr/local/lib/ace/; \
  ln -s ./\1\2 /usr/local/lib/ace/\1|g' > install.sh 
ace$ sh install.sh

バイナリのインストール

ace$ cd ../apps/gperf/src
src$ cp gperf /usr/local/bin/
ace$ 

バージョンファイルのコピー

ACEがどのバージョンかを示すファイルが1つあるので、これをコピーしておきます。

ace$ cd ..
ACE_wrappers$ ls VERSION
VERSION
ACE_wrappers$ cp VERSION /usr/local/lib/ace/
ACE_wrappers$  

GCC 3.x

Solaris 9 x86

Sun Studio 9 C++

Sun製コンパイラです。昔は、WorkShop C++、Forte C++、Sun ONE studio C++などと名称が変遷しています。

1. ACEの入手

Solaris x86版では、なぜか最新のACEがビルドできず、OCI版のACE(TAO)をOCIのTAOページから入手します。商用UNIXと商用コンパイラの場合、OCIの方がビルドできるよう調整されていることが多いようです。

※ OCIはACE+TAOを配布しています。

2. ソースの展開

作業ディレクトリとして、$HOME/workを設け、その下に展開します。

torutk$ cd work
work$ gtar xzf TAO-1.3a_p1.tar.gz
    :
work$ gtar xzf TAO-1.3a_jumbo_patch.tar.gz
    :
work$ cd ACE_wrappers
ACE_wrapperse$

3. config.hの編集

$HOME/work/ACE_wrappers/ace/config.h ファイルを新規作成します。

#include "ace/config-sunos5.9.h"

4. platform_macros.GNU

$HOME/work/ACE_wrapers/include/makeinclude/platform_macros.GNU ファイルを新規に作成します。

ACE_wrappers/include/makeinclude/platform_macros.GNUの記述
include $(ACE_ROOT)/include/makeinclude/platform_sunos5_sunc++.GNU

5. コンパイル・リンク

コンパイルにあたって、デバッグモード、最適化モードの2つを作成します。ライブラリ名が同じになるので、2回ビルドすることになります。

環境変数の設定

環境変数ACE_ROOT
ACE_wrappers$ export ACE_ROOT=`pwd`
ACE_wrappers$ echo $ACE_ROOT
/export/home/torutk/work/ACE_wrappers
ACE_wrappers$
環境変数LD_LIBRARY_PATH
ACE_wrappers$ export LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH
ACE_wrappers$

ACEコアのビルド(デバッグモード)

ダイナミックリンクライブラリとスタティックリンクライブラリの両方をビルドします(static_libs=1)。
RMCastをビルドします(rmcast=1)。SSLをビルドします(ssl=1)。QoSはRAPI(RSVP API)を必要とするようなのですが、SolarisにRSVP APIがあるかどうか不明なので省略。

ACE_wrappers$ cd ace
ace$ gmake static_libs=1 rmcast=1 ssl=1 debug=1

ssl=1としても、SSLがビルドされませんでした。

ACEコアのビルド(最適化モード)

最適化モードでビルドするときは、通常optimize=1としますが、Sunのコンパイラのときは、fast=1とします。

ACE_wrappers$ cd ace
ace$ gmake static_libs=1 rmcast=1 fast=1
 :
ace$  

Solaris 10 x86

Sun Studio 11C++

Sun製コンパイラです。昔は、WorkShop C++、Forte C++、Sun ONE studio C++などと名称が変遷しています。

1. ACEの入手

ACE-5.4.8はビルド可能です。

2. ソースの展開

3. config.hの編集

$HOME/work/ACE_wrappers/ace/config.h ファイルを新規作成します。

#include "ace/config-sunos5.10.h"

4. platform_macros.GNU

$HOME/work/ACE_wrapers/include/makeinclude/platform_macros.GNU ファイルを新規に作成します。

ACE_wrappers/include/makeinclude/platform_macros.GNUの記述
include $(ACE_ROOT)/include/makeinclude/platform_sunos5_sunc++.GNU

5. コンパイル・リンク

6. インストール

以下、/opt/taoディレクトリ下にインストールする場合です。

/opt/tao/
       +--- bin             ACEの実行ファイルはここに格納
       +--- include         
       |     +--- ace       ACEのヘッダファイルを格納
       +--- lib             
             +--- ace    ACEの共有ライブラリファイルを格納

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

ACEコアのヘッダ
ACE_wrappers$ cd ace
ace$ cp `ls *.h | grep -v config` /opt/tao/include/ace/
ace$ cp config.h config-all.h config-sunos5.[56789].h config-sunos5.10.h \
config-lite.h config-macros.h config-posix.h /opt/tao/include/ace/
ace$ cp *.i *.inl /opt/tao/include/ace/
ace$ 

リンク

ACEプロジェクトに関するリンク

インストールに関するリンク