最近要用TAO和ACE来开发中间件,网上找了好多配置环境的例程,发现不是十分的理想,现在结合自己的配置已经安装步骤,做个简要的安装说明。
0. 准备工作
0.1 下载源码包
源码可以上官网下载,下载链接http://download.dre.vanderbilt.edu/
打开链接,如下图:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuM2ZWpmexN3Lc12bj5ic1dWbp5Savw1LcpDc0RHaiojIsJye.png)
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
.
作为可选项,为了减小静态库文件和你的可执行程序的大小,你可以在
文件的#include语句前添加如下的宏定义
%ACE_ROOT%\ace\config.h
来禁止内联函数。
#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