1
、从官网下载最新的版本,地址是:
http://download.dre.vanderbilt.edu/
,本实验系统下载的版本是ACE+TAO-5.6.7.zip
,在windows XP
操作系统上,使用VS2008
进行编译。
2 、解压下载的ACE+TAO-5.6.7.zip ,本实验系统放在E 盘上,即E:/ACE_wrappers 。在该文件夹下,有ace 的安装向导文件ACE-INSTALL.html 在E:/ACE_wrappers/TAO 文件夹下有 TAO 的安装向导文件TAO-INSTALL.html 。
3 、设置环境变量:
3.1 、在“我的电脑”属性中找到“高级”选项下的环境变量设置按钮,开始进行设置。
本实验系统设置如下两个变量:
ACE_ROOT E:/ACE_wrappers
TAO_Root E:/ACE_wrappers/TAO
2 、解压下载的ACE+TAO-5.6.7.zip ,本实验系统放在E 盘上,即E:/ACE_wrappers 。在该文件夹下,有ace 的安装向导文件ACE-INSTALL.html 在E:/ACE_wrappers/TAO 文件夹下有 TAO 的安装向导文件TAO-INSTALL.html 。
3 、设置环境变量:
3.1 、在“我的电脑”属性中找到“高级”选项下的环境变量设置按钮,开始进行设置。
本实验系统设置如下两个变量:
ACE_ROOT E:/ACE_wrappers
TAO_Root E:/ACE_wrappers/TAO
3.2
、
为了便于今后使用ACE/TAO
,应当将
%ACE_ROOT%/bin
(部分通用工具的输出目录)
%ACE_ROOT%/lib
(所有
.lib
、
.dll
文件的输出目录)
添加到PATH
环境变量中。
4
、在%ACE_ROOT%/ace
目录下添加一个文件config.h
,并在其中添加如下内容:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#define ACE_HAS_MFC 1
#include "ace/config-win32.h"
具体方法见ACEInstallation Guide
,
这里是一部分解释:
4.1
、#include"ace/config-win32.h"
以说明是要在win32平台下进行编译。
注: #include"config-win32.h"亦可
4.2
、如果是98/ME,则在ACE_ROOT/ace/config.h的最前面加上
#define ACE_HAS_WINNT4 0
来关掉一些NT/2000中特有的代码。
4.3
、如果你想用MSVC的STL库 (如iostream,cstdio等), 则在config.h文件
中的#include语句前添加下面的行:
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
注: 推荐使用该编译开关.否则对新手而言, 在自己的工程中使用MSVC的STL库时会有一些小麻烦.
4.4
、如果在ACE中要使用MFC的库,则需要在config.h中添加:
#define ACE_HAS_MFC 1
4.5
、在默认情况下,所有的ACE工程使用的是MSVC的DLL文件作为运行时库。你可以选择使用ACE的静态库文件(LIB)而不需考虑这些运行时库。选择动态链接的原因是所有的NT都会包含这些dll文件(节省空间).如果你想使用MFC的静态库版本,则需要在config.h中加入以下的宏定义:
#define ACE_USES_STATIC_MFC 1
你也可以全部使用静态库,这需要你在ACE的工程文件中自己设置。
4.6.
如果定义了ACE_AS_STATIC_LIBS宏,则ACE 库将被编译成为静态库。如果你的程序要静态链接ACE的静态库,则在你的工程中也要定义这个宏:
ACE_AS_STATIC_LIBS.
作为可选项,为了减小静态库文件和你的可执行程序的大小,你可以在ACE_ROOT/ace/config.h文件的#include语句前添加如下的宏定义#define ACE_NO_INLINE来禁止内联函数。
4.7
、
若是在其它平台上进行编译,还需要添加文件:
$ACE_ROOT/include/makeinclude/platform_macros.GNU
5
、选择Tools -> Options -> Projects and Solutions -> VC++ Directories
,添加如下编译器环境变量:
Executable files:
$(ACE_ROOT)/bin
$(CIAO_ROOT)/bin
Include files:
$(ACE_ROOT)
$(TAO_ROOT)
$(TAO_ROOT)/orbsvcs
$(CIAO_ROOT)
$(CIAO_ROOT)/ciao
Library files:
$(ACE_ROOT)/lib
6
、下面对Tao
进行编译
本实验系统是选择打开E:/ACE_wrappers/TAO
文件夹下的TAO_ACE_vc9.sln
,首先是对ACE
进行编译,然后是对TAO
进行编译,因为是
应用TAO
进行
CORBA
应用开发,下面的几个工程是必须的:
6.1
、TAO_IDL_EXE
(即tao_idl
,也就是我们的idl
编译器,自然少不了,并且后续工程也需
要用到该编译器。该工程依赖于ACE
、TAO_IDL_BE
、TAO_IDL_FE
、gperf
等多个工程,编
TAO_IDL_EXE
是会自动先编译这几个工程),该程序在编译TAO
时已自动编译。
6.2
、PortableServer
(即POA
库,编写CORBA
应用程序哪能离得开POA
,该工程依赖于ACE
、
TAO
、CodeSet
、AnyTypeCode
等工程)
6.3
、Naming_Service
(即命名服务,这是对于我们开发CORBA
应用相当有用的一个基本服
务,该工程依赖的其它工程就更多了,就不再一一列举了)
6.4
、由于工程之间存在的复杂依赖关系,你只需编译最后这三个工程,就可以自动完成约30
个工程的编译工作。编译完以上工程后,你的%ACE_ROOT%/lib
和%ACE_ROOT%/bin
下会多出来一些.lib
、.dll
和.exe
文件。作为一个ORB
服务,Name_Service.exe
被放在其对应的子目录%TAO_ROOT%/orbsvcs/Name_Service
下。
附录:
在google
上搜索TAO
使用指南,大致有一个原创来源于水木清华的在VC6.0
下编译的方法,还有一个是
CORBAProgramming with TAO
中的在
VS2005
中编译的方法,此文章没有找到最开始的来源,不过网上有很多转载,还有一个参考就是从官网下载下来
ACE
和
TAO
,它会带有一个安装的指南,本实验系统就是基本参考这三种方式进行的安装,编译。因为不同版本之间会有一些略微的不同,下面的内容就是有一些不同点或者是在开发过程中谋篇文章指出的注意要点
.
一.
路径设置
1.
首先确认环境变量ACE_ROOT
和TAO_ROOT
已被正确设置.
2.
将(ACE_ROOT/bin)
添加到PATH
环境变量中.
否则会找不到DLL.
3.
在Tools->Options->Directories
中,
分别添加如下目录:
Include files:
$(ACE_ROOT),$(TAO_ROOT),$(TAO_ROOT)/orbsvcs
Library files:
$(ACE_ROOT)/ace,$(TAO_ROOT)/tao,$(TAO_ROOT)/orbsvcs/orbsvcs
4.
也可以在Project->Settings->C/C++->Preprocessor->Additionalinclude directories
中添加头文件的路径.
在Project->Settings->Link->Input->Additionallibrary directories
中添加静态库文件路径.
二.
工程设置
1. Project->Settings->C/C++->Code generation:
如果工程是Debug
版,
选择DebugMultithreaded DLL
如果工程是Release
版,
选择MultithreadedDLL
2.Project->Settings->Link->Input->Object/library modules:
需要添加TAO
的静态链接库文件:
说明 Debug
版 Release
版
---------------------------------------------
普通客户端: Debug
版: ACEd.lib
Release
版: ACE.lib
普通服务器:
在ACE.lib/ACEd.lib
的基础上,
还需要添加:
Debug
版: PortableServerd.lib
Release
版: PortableServer.lib
如果使用了名字服务,
则需要添加TAO_CosNaming.lib
或
TAO_CosNamingd.lib
如果使用了事件服务,
则需要添加TAO_CosEvent.lib
或
TAO_CosEventd.lib
注意: TAO
分Debug
和Release
版,
所以在开发时,Debug
和Release
版的设置要严格区分.
即使是MS
自己的库也是这样.
如对于Debug
版,
要包含MSVCRTd.lib
而不是MSVCRT.lib.
三、编译顺序.
TAO
中有好多服务可能是你用不到的.
所以编译时没有必要将所有的程序全部
编译一遍.
要知道编译TAO
还是个艰巨的任务咧.
我目前只用到了Naming
和Event
服务,
并且没有用它的实时CORBA
功能.
所以我
的编译顺序是:
说明
需要编译的工程
---------------------------------------
核心库 ACE DLL Files
TAO DLL Files
IDL
编译器 gperf Files
TAO_IDL_FE_DLL Files
TAO_IDL_BE_DLL Files
TAO_IDL Compiler Files
POA PortableServer Files
名字和事件服务 IORTable Files
Svc Utils Files
CosNaming Files
Naming_Service Files
Messaging Files
CosEvent Files
CosEvent_Service Files
NT_Naming_Service Files
----------------------------------------
四、
编译后得到的文件分散于各目录中:
可执行程序和动态链接库文件:
$ACE_ROOT/bin
lib
文件:
$(ACE_ROOT)/ace,
$(TAO_ROOT)/tao,
$(TAO_ROOT)/orbsvcs/orbsvcs
头文件: $(ACE_ROOT),
$(TAO_ROOT),
$(TAO_ROOT)/orbsvcs
五、目录结构及SDK
TAO
的文件众多,
目录结构复杂,
所以生成一个所谓的TAO SDK
来方便开发.
这个TAO SDK
的目录结构如下:
TAOSDK_ROOT
|
|-- bin (
所有的可执行文件和动态链接库)
|-- idl (ORB
的IDL文件)
|-- include (
所有的头文件)
| |-- ace
| | |-- ***
| | |-- ***
| |
| |-- orbsvcs
| | |-- CosEvent
| | |-- Naming
| | |-- ***
| | |-- ***
| |
| |-- tao
| | |-- IORTable
| | |-- PortableServer
| | |-- ***
|-- lib (
所有的静态库文件)
使用时, 首先创建环境变量TAOSDK_ROOT 为TAO SDK的根目录, 然后在VC的工程中如下设置:
添加头文件的include路径:
$(TAOSDK_ROOT)/include,$(TAOSDK_ROOT)/include/orbsvcs,$(TAOSDK_ROOT)/tao
添加静态库文件路径:
$(TAOSDK_ROOT)/lib
参考:
1.
Building andInstalling ACE.
2.
Building andInstalling TAO.
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/TAO-INSTALL.html
3.
TAO
使用指南[zt from smth]
4.
CORBAProgramming with TAO - 2.Compile Source Code
(编译ACE/TAO/CIAO
)