简要介绍如何在Windows平台上编译ACE/TAO/CIAO,及编译过程中需注意的问题。
随着ACE/TAO/CIAO研究者研究的不断深入,整个平台变得越来越庞大,涉及的工程及目录数目也越来越多,下面简要介绍一下如何在Windows平台上编译ACE/TAO/CIAO,其过程在其它平台上是类似的。
在开始之前,先简要介绍一下整个产品的目录结构。ACE(Adaptive Communication Environment)是整个ACE/TAO/CIAO体系的基础,由操作系统适配层、对并发/进程间通信/虚拟内存管理等的OO封装、ACE框架、网络服务组件等几个部分组成;而TAO(The ACE ORB)则是在ACE基础上建立起来的一个CORBA ORB实现;CIAO(Component Integrated ACE ORB)则是在TAO基础上的一个CORBA Component Model实现,同时CIAO也是目前相对比较成熟的一个CCM实现。
正是由于三者之间的上述关系,在目录结构上整个源码包也采用了类似下面的结构:
ACE_ROOT
├─ace
├─docs
├─...
├─TAO
│ ├─tao
│ ├─docs
│ ├─orbsvcs(TAO实现的众多CORBA服务被放置在这个目录下)
│ ├─...
│ ├─CIAO
│ │ ├─ciao
│ │ ├─docs
│ │ ├─DAnCE
│ │ ├─RACE
│ │ ├─...
三个产品的帮助文档,可以在相应节点下的docs目录中找到,其中除了对相应产品特定模块或服务的说明外,还包括一些不错的Tutorial,对于我们理解相应产品很有帮助(ACE/TAO/CIAO的较完整的文档是收费的,这些随源码发布的文档虽然少,但仍颇为有用)。
可以使用VC6/7.1/8来编译ACE/TAO/CIAO,不推荐使用VC7,但由于VC6的Project Settings不支持环境变量,会对我们使用CIAO带来一些麻烦(如需手动修改自动生成的工程文件),因此,笔者推荐读者使用VC8,即Visual C++ 2005来进行编译(注:现在VC++ 2005 Express可以从MS的网站上免费获得,但若安装该版本的话,需按照http://lab.msdn.microsoft.com/express/visualc/usingpsdk/default.aspx的指示安装SDK并进行相关设置)。VC8在调试器的设计上有了很大改进,同时对C++标准的支持也有了很大进步(但也变得非常耗资源),因此,下面的讨论将基于ACE-5.5+TAO-1.5+CIAO-0.5 + VC2005 Express,不保证在其它ACE或编译器版本下完全一致。
好啦,废话说完了,重新回到我们的主题。
首先,设置好如下环境变量:
ACE_ROOT
TAO_ROOT
CIAO_ROOT
分别指向ACE根目录,TAO根目录(即%ACE_ROOT%/TAO),CIAO根目录(即%TAO_ROOT%/CIAO)。
在%ACE_ROOT%/ace目录下添加一个文件config.h,并在其中添加如下内容:
/* -*- C++ -*- */
//=============================================================================
/**
* @file config.h
*
*/
//=============================================================================
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#include "ace/config-win32.h"
若是在其它平台上进行编译,还需要添加文件:
$ACE_ROOT/include/makeinclude/platform_macros.GNU
具体方法见ACE Installation Guide。
此外,为了便于今后使用ACE/TAO/CIAO,应当将
%ACE_ROOT%/bin(部分通用工具的输出目录)
%ACE_ROOT%/lib(所有.lib、.dll文件的输出目录)
添加到PATH环境变量中。
并且,需打开VC8,选择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
现在可以开始编译了,但是,在笔者的Win2000中编译ACE5.5/TAO1.5/CIAO0.5时遇到的第一个问题就是:源码包中的VC Workspace/Solution打开之后一片空白,一个工程也没有。(上一版本没有这个问题。最终通过比较源码包中的.sln文件和通过下面的方法得到的.sln文件,发现其实是由于文件是Unix格式造成的)
几经周折,终于想到了一个办法:自己运行mwc.pl重新生成工程文件。
要运行mwc.pl自然需要安装Perl,安装过程略。
下面简单说说mwc的工作原理:
mwc.pl根据参数中指定的.mwc文件的内容到相应目录下查找.mpc文件,在没有指定.mwc文件或.mwc文件中没有指定查找目录的情况下会尝试进入各子目录,查找.mpc文件(相当于一个makefile文件),按照.mpc文件生成工程信息,若连一个.mpc文件也找不到,就将当前目录下所有可识别的文件当作源文件,产生一个默认的工程文件。最终,mwc.pl将所有工程文件合并到一个独立的Solution/Workspace。
.mwc文件的结构其实很简单,下面是%TAO_ROOT%/TAO_ACE.mwc的全部内容:
// -*- MPC -*-
// TAO_ACE.mwc,v 1.1 2006/02/16 09:20:48 jwillemsen Exp
workspace {
../ace
../apps/gperf/src
../ACEXML/common
../ACEXML/parser/parser
../ACEXML/apps/svcconf
../Kokyu/Kokyu.mpc
../protocols
tao
TAO_IDL
utils
orbsvcs
exclude {
orbsvcs/tests
orbsvcs/performance-tests
orbsvcs/examples
}
}
其作用就是告诉mwc.pl到哪些目录下去查找.mpc文件(若没有指定,则表示应检查所有子目录),而其中的exclude则表示应略过那些目录,如果你愿意,完全可以自己编写.mwc文件(不过,工程具体的描述文件.mpc则比较复杂,一言难尽,想一探究竟的话,最好还是看看MPC的说明文档http://www.cs.wustl.edu/~schmidt/ACE_wrappers/MPC/USAGE或http://downloads.ociweb.com/MPC/MakeProjectCreator.pdf)。
对mwc.pl的工作原理有了基本的了解后,就可以运行mwc.pl生成工程文件了。执行mwc.pl的办法很简单,如要生成使用CIAO的基本工程,可以在%CIAO_ROOT%下运行:
mwc.pl -type vc8 CIAO_TAO.mwc
上述命令将产生一个名为CIAO_TAO.sln的Solution文件,有了.sln文件,就可以正式进行编译了。
应用TAO进行CORBA应用开发,下面的几个工程是必须的:
· TAO_IDL_EXE(即tao_idl,也就是我们的idl编译器,自然少不了,并且后续工程也需要用到该编译器。该工程依赖于ACE、TAO_IDL_BE、TAO_IDL_FE、gperf等多个工程,编译TAO_IDL_EXE是会自动先编译这几个工程)
· PortableServer(即POA库,编写CORBA应用程序哪能离得开POA,该工程依赖于ACE、TAO、CodeSet、AnyTypeCode等工程)
· Naming_Service(即命名服务,这是对于我们开发CORBA应用相当有用的一个基本服务,该工程依赖的其它工程就更多了,就不再一一列举了)
而要使用CIAO,则还必须编译%CIAO_ROOT%/DAnCE下的多个工程,这些工程包括:
· ExecutionManager
· NodeManager
· Plan_Launcher
· NodeApplication
这几个工程是部署与配置引擎(Deployment And Configuration Engine,DAnCE)的一部分,负责处理面向组件的应用的部署与配置。
由于工程之间存在的复杂依赖关系,你只需编译最后这三个工程,就可以自动完成约30个工程的编译工作。编译完以上工程后,你的%ACE_ROOT%/lib和%ACE_ROOT%/bin下会多出来一些.lib、.dll和.exe文件。作为一个ORB服务,Name_Service.exe被放在其对应的子目录%TAO_ROOT%/orbsvcs/Name_Service下。
注:
1、为了编译CIAO_XML_Utils,需要安装Xerces-C++ 2.7.0,但http://xml.apache.org/xerces-c/提供的下载采用VC6编译,该版本不能用于VC7及以上版本,如果你用的不是VC6,则需要下载源码重新编译。如果你用的是VC++ 2005 Express,由于没有ATL及MFC,在编译时会遇到一些麻烦,可以在SDK Dir/include下自行添加一个WINRES.h,在其中添加如下代码(两行,空行是必须的):
#include <winresrc.h>
2、如果要试用CIAO,还需用到cidl编译器cidlc,该工具可以从http://www.dre.vanderbilt.edu/cidlc/binary/下载。
1. Building and Installing ACE and Its Auxiliary Libraries and Services. http://www.cs.wustl.edu/~schmidt/ACE_wrappers/ACE-INSTALL.html
2. Building and Installing CIAO. http://www.cs.wustl.edu/~schmidt/ACE_wrappers/TAO/CIAO/CIAO-INSTALL.html
3. The Makefile, Project, and Workspace Creator (MPC). http://downloads.ociweb.com/MPC/MakeProjectCreator.pdf