TAO使用指南.docx
《TAO使用指南.docx》由会员分享,可在线阅读,更多相关《TAO使用指南.docx(18页珍藏版)》请在冰豆网上搜索。
![TAO使用指南.docx](https://file1.bdocx.com/fileroot1/2022-11/28/40532027-54b6-4717-87ac-5e38b5dfdd61/40532027-54b6-4717-87ac-5e38b5dfdd611.gif)
TAO使用指南
TAO使用指南
发信站:
BBS水木清华站(ThuMay818:
35:
492003),站内
最近正在将一个工程由Orbix2000向TAO移植.将一些心得和经验奉上,
算是给DOC版做点贡献...说的不对,请大家指正.同时您有什么心得
也不仿写出来嘛:
)
1.什么是TAO?
TAO是美国华盛顿大学的CORBA界大牛DouglasC.Schmidt博士领导
开发的一个实时CORBA平台.它是一个开放源码项目,所以是完全免费的.
用C++语言开发.符合CORBA2.6版本.
支持语言:
C++
支持平台:
Win32,常见的各种Unix,Linux,实时操作系统如VxWorks
等等.在所有的CORBA平台中,TAO支持的平台应该是最多的.
支持的服务:
Naming,Event,Notification,Security,Time,
Scheduling,Logging,Lifecycle,Trading,Concurrency,Lifecycle,
A/VStreaming,Loadbalancing等.
2.网上的TAO资源
TAO主页:
http:
//www.cs.wustl.edu/~schmidt/TAO.html
OCI公司宣布对TAO进行技术支持:
它出了一本书叫:
TAODeveloper'sGuide,上下两卷,1000页
左右,要250美刀.吐血买了一本...
此外,OCI有自己的TAO发布版本,最新版本号为1.2a.Win32版本
开价50美刀.
OCI有一个TAO的FAQ,很不错,地址:
TAO的MailingList:
tao-users@cs.wustl.edu
MailingListArchive:
3.下载TAO
地址:
http:
//download.dre.vanderbilt.edu/
目前最新的Release版本是1.3
发信人:
Mentoya(钻研Orbix2000中...),信区:
DOC
标题:
TAO使用指南--编译ACE和TAO
发信站:
BBS水木清华站(ThuMay819:
11:
372003),转信
我只用到Win32平台.现在使用的环境是:
WinXPProfessional+MSVCSP5.
在Win32平台下,还可以使用C++Builder来编译和开发TAO.我没有用过.:
-(
参见:
http:
//www.cs.wustl.edu/~schmidt/ACE_wrappers/TAO/TAO-INSTALL.html
------------------------------------------------------------------------
TAO完全支持Win32API,(包括WindowsNT,Windows2000,Windows95/98/ME)
VC5.0和VC6.0均可编译。
如果要在BorlandC++Builder中编译,请参见有关文档.
TAO可以被编译成两种版本:
DLL版(动态链接)和LIB版(静态链接)
一.Win32+VC6.0下编译和安装ACE和TAO
将网上下载的TAO软件包解压缩到某个目录,在该目录下会有ACE_wrappers目录。
请按照以下步骤来执行:
1.新建两个环境变量:
ACE_ROOT=ACE_wrappers所在目录;
TAO_ROOT=ACE_wrappers\tao
2.在ACE_ROOT\ace目录下建立一个空文件config.h,里面包含一句:
#include"ace/config-win32.h"
以说明是要在win32平台下进行编译。
注:
(1)#include"config-win32.h"亦可
(2)最好在#include之前加上
#defineACE_HAS_STANDARD_CPP_LIBRARY1以使用MSVC的STL库.
3.如果是98/ME,则在ACE_ROOT\ace\config.h的最前面加上
#defineACE_HAS_WINNT40
来关掉一些NT/2000中特有的代码。
4.如果你想用MSVC的STL库(如iostream,cstdio等),则在config.h文件
中的#include语句前添加下面的行:
#defineACE_HAS_STANDARD_CPP_LIBRARY1
注:
推荐使用该编译开关.否则对新手而言,在自己的工程中使用MSVC的STL
库时会有一些小麻烦.
5.如果在ACE中要使用MFC的库,则需要在config.h中添加:
#defineACE_HAS_MFC1
在默认情况下,所有的ACE工程使用的是MSVC的DLL文件作为运行时库。
你可以选择使用ACE的静态库文件(LIB)而不需考虑这些运行时库。
选择动态链接的原因是所有的NT都会包含这些dll文件(节省空间).
如果你想使用MFC的静态库版本,则需要在config.h中加入以下的宏定义:
#defineACE_USES_STATIC_MFC1
你也可以全部使用静态库,这需要你在ACE的工程文件中自己设置。
6.如果定义了ACE_AS_STATIC_LIBS宏,则ACE库将被编译成为静态库。
如果你的程序要静态链接ACE的静态库,则在你的工程中也要定义这个宏:
ACE_AS_STATIC_LIBS.
作为可选项,为了减小静态库文件和你的可执行程序的大小,你可以在
ACE_ROOT\ace\config.h文件的#include语句前添加如下的宏定义
#defineACE_NO_INLINE
来禁止内联函数。
7.用VC打开TAO和ACE的工程文件:
ACE_ROOT\tao\taoace.dsw,开始编译ACE
和TAO.注意ACE和TAO有Debug和Release两个版本.你在开发自己的程序时,
如果是Debug版的程序,必须链接Debug版的TAO库,如果是Release版的程序,
必须链接Release版的TAO库.(这不废话!
不过你一定会回来和我一起唱这个
当当当的)
taoace.dsw中包含了许多工程,工程之间是有依赖关系的.所以这个工程
编译的顺序比较重要.关于编译的顺序,下文叙述.
每个工程都包含有一些不同的配置:
Debug/Release、MFC/Non-MFC、
Static/Dynamic等版本。
你必须确定你所需要的版本。
如,要生成你程序的
debug版,则需要debug版的ACE。
注意:
如果你用动态(DLL)版本的TAO,在开发程序时,需要将ACE_ROOT\bin
目录添加到你的程序的PATH环境变量中,否则程序会报告找不到动态链接库.
8.编译顺序.
TAO中有好多服务可能是你用不到的.所以编译时没有必要将所有的程序全部
编译一遍.要知道编译TAO还是个艰巨的任务咧.
我目前只用到了Naming和Event服务,并且没有用它的实时CORBA功能.所以我
的编译顺序是:
说明需要编译的工程
---------------------------------------
核心库ACEDLLFiles
TAODLLFiles
IDL编译器gperfFiles
TAO_IDL_FE_DLLFiles
TAO_IDL_BE_DLLFiles
TAO_IDLCompilerFiles
POAPortableServerFiles
名字和事件服务IORTableFiles
SvcUtilsFiles
CosNamingFiles
Naming_ServiceFiles
MessagingFiles
CosEventFiles
CosEvent_ServiceFiles
NT_Naming_ServiceFiles
----------------------------------------
TAO的主页上有一个可以自动编译所有TAO工程的脚本,记不得在那里了.
9.编译后得到的文件分散于各目录中:
可执行程序和动态链接库文件:
$ACE_ROOT\bin
lib文件:
$(ACE_ROOT)\ace,
$(TAO_ROOT)\tao,
$(TAO_ROOT)\orbsvcs\orbsvcs
头文件:
$(ACE_ROOT),
$(TAO_ROOT),
$(TAO_ROOT)\orbsvcs
10.ACE的DLL和LIB的命名规则:
当使用MSVC编译时的命名规则如下:
"静态库/DLL文件名"+(是静态库吗?
"s":
"")+
(是Debug模式的库吗?
"d":
"")+(.dll/.lib)
11.测试TAO
TAO的测试代码位于TAO_ROOT\tests目录下。
有一个vc的工程文件:
TAO_tests.dsw来编译所有的测试代码。
发信人:
Mentoya(钻研Orbix2000中...),信区:
DOC
标题:
TAO使用指南--用VC++开发TAO程序
发信站:
BBS水木清华站(ThuMay819:
34:
422003),转信
在MicrosoftVisualC++中开发TAO程序时的设置:
一.路径设置
1.首先确认环境变量ACE_ROOT和TAO_ROOT已被正确设置.
2.将(ACE_ROOT\bin)添加到PATH环境变量中.否则会找不到DLL.
3.在Tools->Options->Directories中,分别添加如下目录:
Includefiles:
$(ACE_ROOT),$(TAO_ROOT),$(TAO_ROOT)\orbsvcs
Libraryfiles:
$(ACE_ROOT)\ace,$(TAO_ROOT)\tao,$(TAO_ROOT)\orbsvcs\orbsvcs
4.也可以在
Project->Settings->C/C++->Preprocessor->Additionalincludedirectories
中添加头文件的路径.
在
Project->Settings->Link->Input->Additionallibrarydirectories
中添加静态库文件路径.
二.工程设置
1.Project->Settings->C/C++->Codegeneration:
如果工程是Debug版,选择DebugMultithreadedDLL
如果工程是Release版,选择MultithreadedDLL
2.Project->Settings->Link->Input->Object/librarymodules:
需要添加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:
-(
发信人:
Mentoya(钻研Orbix2000中...),信区:
DOC
标题:
TAO使用指南--做一个TAO的SDK
发信站:
BBS水木清华站(ThuMay819:
56:
032003),站内
TAO的文件众多,目录结构复杂,所以生成一个所谓的TAOSDK来方便开发.
这个TAOSDK的目录结构如下:
TAOSDK_ROOT
|
|--bin(所有的可执行文件和动态链接库)
|--idl(ORB的IDL文件)
|--include(所有的头文件)
||--ace
|||--***
|||--***
||
||--orbsvcs
|||--CosEvent
|||--Naming
|||--***
|||--***
||
||--tao
|||--IORTable
|||--PortableServer
|||--***
|--lib(所有的静态库文件)
使用时,首先创建环境变量TAOSDK_ROOT为TAOSDK的根目录,然后
在VC的工程中如下设置:
添加头文件的include路径:
$(TAOSDK_ROOT)\include,$(TAOSDK_ROOT)\include\orbsvcs,$(TAOSDK_ROOT)\tao
添加静态库文件路径:
$(TAOSDK_ROOT)\lib
下面提供了一个自动生成TAOSDK的批处理文件,将该文件置于ACE_ROOT目录下,
然后执行之...
注:
本程序来源于TAO的邮件列表.
Filename:
TAOSDK.bat
-------------------------------------------------------------------------
@echooff
@echoCreateingdirectories…
mkdir..\tao\bin
mkdir..\tao\include
mkdir..\tao\include\ace
mkdir..\tao\include\ace\classix
mkdir..\tao\include\ace\qos
mkdir..\tao\include\ace\rmcast
mkdir..\tao\include\ace\ssl
mkdir..\tao\include\tao
mkdir..\tao\include\tao\BiDir_GIOP
mkdir..\tao\include\tao\Domain
mkdir..\tao\include\tao\DynamicAny
mkdir..\tao\include\tao\DynamicInterface
mkdir..\tao\include\tao\IFR_Client
mkdir..\tao\include\tao\IORManipulation
mkdir..\tao\include\tao\IORTable
mkdir..\tao\include\tao\PortableServer
mkdir..\tao\include\tao\RTCORBA
mkdir..\tao\include\tao\RTPortableServer
mkdir..\tao\include\tao\SmartProxies
mkdir..\tao\include\tao\Strategies
mkdir..\tao\include\tao\TypeCodeFactory
mkdir..\tao\include\orbsvcs
mkdir..\tao\include\orbsvcs\***
mkdir..\tao\include\orbsvcs\Concurrency
mkdir..\tao\include\orbsvcs\CosEvent
mkdir..\tao\include\orbsvcs\ESF
mkdir..\tao\include\orbsvcs\ETCL
mkdir..\tao\include\orbsvcs\Event
mkdir..\tao\include\orbsvcs\FaultTolerance
mkdir..\tao\include\orbsvcs\LifeCycle
mkdir..\tao\include\orbsvcs\LoadBalancing
mkdir..\tao\include\orbsvcs\Log
mkdir..\tao\include\orbsvcs\Naming
mkdir..\tao\include\orbsvcs\Notify
mkdir..\tao\include\orbsvcs\Property
mkdir..\tao\include\orbsvcs\Sched
mkdir..\tao\include\orbsvcs\Security
mkdir..\tao\include\orbsvcs\SSLIOP
mkdir..\tao\include\orbsvcs\Time
mkdir..\tao\include\orbsvcs\Trader
mkdir..\tao\lib
@echocopyingheaderfiles...
copyace\*.i..\tao\include\ace
copyace\*.inl..\tao\include\ace
copyace\*.h..\tao\include\ace
copyace\*.cpp..\tao\include\ace
copyace\classix\*.i..\tao\include\ace\classix
copyace\classix\*.h..\tao\include\ace\classix
copyace\classix\*.cpp..\tao\include\ace\classix
copyace\qos\*.i..\tao\include\ace\qos
copyace\qos\*.h..\tao\include\ace\qos
copyace\qos\*.cpp..\tao\include\ace\qos
copyace\rmcast\*.i..\tao\include\ace\rmcast
copyace\rmcast\*.h..\tao\include\ace\rmcast
copyace\rmcast\*.cpp..\tao\include\ace\rmcast
copyace\ssl\*.i..\tao\include\ace\ssl
copyace\ssl\*.h..\tao\include\ace\ssl
copyace\ssl\*.cpp..\tao\include\ace\ssl
copytao\tao\*.i..\tao\include\tao
copytao\tao\*.inl..\tao\include\tao
copytao\tao\*.h..\tao\include\tao
copytao\tao\*.idl..\tao\include\tao
copytao\tao\*.cpp..\tao\include\tao
copytao\orbsvcs\Naming_Service\*.h..\tao\include\tao
copytao\orbsvcs\LoadBalancer\*.h..\tao\include\tao
copytao\orbsvcs\Logging_Service\*.h..\tao\include\tao
copytao\orbsvcs\TAO_Service\*.h..\tao\include\tao
copytao\orbsvcs\Time_Service\*.h..\tao\include\tao
copytao\orbsvcs\Naming_Service\*.h..\tao\include\tao
copytao\orbsvcs\Trading_Service\*.h..\tao\include\tao
copytao\orbsvcs\ImplRepo_Service\*.h..\tao\include\tao
copytao\orbsvcs\Concurrency_Service\*.h..\tao\include\tao
copytao\orbsvcs\CosEvent_Service\*.h..\tao\include\tao
copytao\orbsvcs\Dump_Schedule\*.h..\tao\include\tao
copytao\orbsvcs\Event_Service\*.h..\tao\include\tao
copytao\orbsvcs\IFR_Service\*.h..\tao\include\tao
copytao\orbsvcs\LifeCycle_Service\*.h..\tao\include\tao
copytao\orbsvcs\Notify_Service\*.h..\tao\include\tao
copytao\orbsvcs\Scheduling_Service\*.h..\tao\include\tao
copytao\orbsvcs\orbsvcs\*.h..\tao\include\orbsvcs
copytao\orbsvcs\orbsvcs\*.i..\tao\include\orbsvcs
copytao\orbsvcs\orbsvcs\*.cpp..\tao\include\orbsvcs
copytao\orbsvcs\orbsvcs\***\*.h..\tao\include\orbsvcs\***
copytao\orbsvcs\orbsvcs\***\*.i..\tao\include\orbsvcs\***
copytao\orbsvcs\orbsvcs\***\*.cpp..\tao\include\orbsvcs\***
copytao\orbsvcs\orbsvcs\Concurrency\*.h..\tao\include\orbsvcs\Concurrency
copytao\orbsvcs\orbsvcs\Concurrency\*.i..\tao\include\orbsvcs\Concurrency
copytao\orbsvcs\orbsvcs\Concurrency\*.cpp..\tao\include\orbsvcs\C