天天看点

TAO和ACE在Windows平台下的编译与安装

最近要用TAO和ACE来开发中间件,网上找了好多配置环境的例程,发现不是十分的理想,现在结合自己的配置已经安装步骤,做个简要的安装说明。

0. 准备工作

0.1 下载源码包

源码可以上官网下载,下载链接http://download.dre.vanderbilt.edu/

打开链接,如下图:

TAO和ACE在Windows平台下的编译与安装

Linux/Unix用户下载tar.gz或者tar.bz2格式;Windows用户下载zip格式。

0.2 开发环境

系统:win7 64bit 旗舰版;

开发工具:Visual Studio 2005

1. 配置环境变量

环境变量主要涉及系统环境变量和VS2005的配置。

1.1 系统环境变量

依次打开 计算机 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量;

1) 创建并设置以下新的环境变量,使其指向各自的根目录:

ACE_ROOT = /YOUR DIR PATH/ACE_wrappers (ACE根目录)
TAO_ROOT = %ACE_ROOT%/TAO              (TAO根目录)           
CIAO_ROOT = %TAO_ROOT%/CIAO            (CIAO根目录)
           

2)PATH环境变量中追加以下环境变量设置

%ACE_ROOT%/bin(部分通用工具的输出目录)
%ACE_ROOT%/lib(所有.lib、.dll文件的输出目录)
           

ACE和TAO的依赖库文件会统一放置在lib目录下,方便进行依赖使用;

可执行文件放置在bin目录下。

1.2 VS2005环境设置

打开VS2005,选择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
           
添加以上配置是为了在开发中,省去在每个项目中配置头文件、依赖库等属性。

2. 适配平台移植性

ACE主要提供了不同平台的适配性代码,用于支持不同的平台,同时也为了编译的成功,后续的使用,需要设置进行以下工作。

2.1 添加头文件

%ACE_ROOT%\ace

目录下建立一个空文件

config.h

,里面包含一句,以说明是要在win32平台下进行编译。

#include "ace/config-win32.h"
           

2.2 添加宏定义 (注意:添加在

#include

之前)

#define ACE_HAS_WINNT4               0         //OS不是NT4.0或以后版本
#define ACE_HAS_STANDARD_CPP_LIBRARY 1          //使用标准C++库 MSVC的STL库
#define ACE_HAS_MFC                  1          //使用MFC库
#define THR_USE_AFX                  1          //使用CWinThread产生新的线程类
#define ACE_USES_STATIC_MFC          1          //静态连接MFC库
#define ACE_AS_STATIC_LIBS           1          //生成静态的ACE库
#define ACE_NO_INLINE                           //是否使用内联函数在静态库内
           

一般仅需在

#include

之前添加宏

ACE_HAS_STANDARD_CPP_LIBRARY

以便于标准C++的跨平台移植。

在默认情况下,所有的ACE工程使用的是MSVC的DLL文件作为运行时库。选择动态链接的原因是所有的NT都会包含这些dll文件(节省空间).

如果想使用MFC的静态库版本,则需要在config.h中加入以下的宏定义:

#define ACE_USES_STATIC_MFC 1

如果定义了

ACE_AS_STATIC_LIBS

宏,则ACE库将被编译成为静态库。

如果你的程序要静态链接ACE的静态库,则在你的工程中也要定义这个宏:

ACE_AS_STATIC_LIBS

.

作为可选项,为了减小静态库文件和你的可执行程序的大小,你可以在

%ACE_ROOT%\ace\config.h

文件的#include语句前添加如下的宏定义

#define ACE_NO_INLINE

来禁止内联函数。

3. 生成VS2005工程

一般情况下,此时便可以编译vs工程了,但笔者的

VC Workspace/Solution

打开之后一片空白,一个工程也没有,此时需要安装perl工具进行sln工程的生成。、

3.0 准备工作

笔者使用的是ActivePerl http://www.activestate.com/activeperl/downloads

具体语法可以参考官方手册。

下面简单说说mwc的工作原理:

mwc.pl根据参数中指定的.mwc文件的内容到相应目录下查找.mpc文件,在没有指定.mwc文件或.mwc文件中没有指定查找目录的情况下会尝试进入各子目录,查找.mpc文件(相当于一个makefile文件),按照.mpc文件生成工程信息,若连一个.mpc文件也找不到,就将当前目录下所有可识别的文件当作源文件,产生一个默认的工程文件。最终,mwc.pl将所有工程文件合并到一个独立的Solution/Workspace。

* 在执行perl之前,需要找到各自对应的mwc文件的路径 *

3.1 生成ace.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %ACE_ROOT%/ace/ace.mwc
           

命令解释:

%ACE_ROOT%/bin/mwc.pl 为可执行文件名;-type vc8为VS2005解决方案对应的参数,可以设置为VC9、Vc10等;configurations为生成的版本信息,常见的为Debug和Release;-features为特性;%ACE_ROOT%/ace/ace.mwc 为生成的解决方案的原始的mwc文件,具体解释3.0章节有解释。

3.2 生成tao.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %TAO_ROOT%/tao/tao.mwc
           

3.3 生成tao_ace.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %TAO_ROOT%/tao_ace.mwc
           

3.4 生成ciao.sln

perl %ACE_ROOT%/bin/mwc.pl -type vc8 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug" -features mfc= %CIAO_ROOT%/ciao.mwc
           

4. 编译生成

在第三步执行完成后,会在各自的目录下生成sln工程文件,打开编译即可。

生成文件的命名规则:

“静态库/DLL文件名” + (是静态库吗? “s” : “”) + (是Debug模式的库吗? “d” : “”) + (.dll/.lib)

5. 测试

%ACE_ROOT%/tests

目录下,有一个vc的工程文件:

TAO_tests.dsw

来编译所有的测试代码。

同样,我自己也写了测试程序进行环境的测试,用于输出

hello world

.

测试代码如下:

#include "ace/Log_Msg.h"

int _tmain(int argc, _TCHAR* argv[])
{

    ACE_TRACE(ACE_TEXT ("main"));
    ACE_DEBUG ((LM_INFO, ACE_TEXT ("Hello world\n")));
    getchar();
    return ;
}
           
注意工程添加依赖项:

ACEd.lib

继续阅读