TAO使用指南(一) ——Win32+VC6.0下ACE和TAO的编译

来源:互联网 发布:多益网络策划类笔试 编辑:程序博客网 时间:2024/04/29 11:19

将网上下载的TAO软件包解压缩到某个目录,在该目录下会有ACE_wrappers目录。(这里使用的版本是ACE-5.5+TAO-1.5+CIAO-0.5 + VC6,虽然CIAO暂时还用不上)
请按照以下步骤来执行:

一、新建两个环境变量:
ACE_ROOT
ACE_wrappers所在目录;
TAO_ROOT=ACE_wrappers/tao

二、添加包含头文件声明:
ACE_ROOT/ace目录下建立一个空文件config.h,里面包含一句:
#include "ace/config-win32.h"
以说明是要在win32平台下进行编译。
如果在其它平台,参见下表:

OS/编译器

config.h 文件

platform_macros.GNU 文件

AIX 4/Visual Age C++

config-aix-4.x.h

platform_aix_ibm.GNU

HP-UX 11/aC++

config-hpux-11.00.h

platform_hpux_aCC.GNU

Linux

config-linux.h

platform_linux.GNU

Solaris 8/Forte C++

config-sunos5.8.h

platform_sunos5_sunc++.GNU

Windows

config-win32.h

1:用于流行的ACE平台的配置文件


三、添加宏定义 (注意:添加在 #include 之前)
(1).#define ACE_HAS_WINNT4 0       
             //OS不是NT4.0或以后版本
(2).#define ACE_HAS_STANDARD_CPP_LIBRARY 1         //
使用标准C++ MSVCSTL
(3).#define ACE_HAS_MFC 1                   //
使用MFC
(4).#define THR_USE_AFX 1                   //
使用CWinThread产生新的线程类
(5).#define ACE_USES_STATIC_MFC         1          //
静态连接MFC
(6).#define ACE_AS_STATIC_LIBS          1          //
生成静态的ACE
(7).#define ACE_NO_INLINE                   //
是否使用内联函数在静态库内

在默认情况下,所有的ACE工程使用的是MSVCDLL文件作为运行时库。
你可以选择使用ACE的静态库文件(LIB)而不需考虑这些运行时库。
选择动态链接的原因是所有的NT都会包含这些dll文件(节省空间).
如果你想使用MFC的静态库版本,则需要在config.h中加入以下的宏定义:
#define ACE_USES_STATIC_MFC 1
你也可以全部使用静态库,这需要你在ACE的工程文件中自己设置。

如果定义了ACE_AS_STATIC_LIBS 宏,则ACE 库将被编译成为静态库。
如果你的程序要静态链接ACE的静态库,则在你的工程中也要定义这个宏:
ACE_AS_STATIC_LIBS.


作为可选项,为了减小静态库文件和你的可执行程序的大小,你可以在ACE_ROOT/ace/config.h文件的#include语句前添加如下的宏定义
#define ACE_NO_INLINE
来禁止内联函数。

四、用VC打开TAOACE的工程文件:ACE_ROOT/tao/tao_ace.dsw,开始编译ACETAO.
注意ACETAODebugRelease两个版本. 你在开发自己的程序时,如果是Debug版的程序, 必须链接Debug版的TAO, 如果是Release版的程序,必须链接Release版的TAO.(这不废话! 不过你一定会回来和我一起唱这个当当当的)

tao_ace.dsw
中包含了许多工程, 工程之间是有依赖关系的. 所以这个工程编译的顺序比较重要. 关于编译的顺序, 下文叙述.


每个工程都包含有一些不同的配置:Debug/ReleaseMFC/Non-MFCStatic/Dynamic等版本。你必须确定你所需要的版本。如,要生成你程序的debug版,则需要debug版的ACE

注意:如果你用动态(DLL)版本的TAO,在开发程序时,需要将ACE_ROOT/bin目录添加到你的程序的PATH环境变量中,否则程序会报告找不到动态链接库.

1
、编译TAO_ACE.dsw之前:
打开源码包中后发现其中并没有taoace.dsw,而且其他的VC Workspace打开之后一片空白,一个工程都没有。应该先用perl运行mwc.pl重新生成工程文件。(要运行mwc.pl,当然得下载安装ActivePerl在此不作详述)
(1)
生成tao_ace.dsw
perl %ACE_ROOT%/bin/mwc.pl -type vc6 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug"         -features mfc=1 %ACE_ROOT%/tao/tao_ace.mwc
如果想要生成其他的工程文件,可以执行以下步骤:
(2)
生成ACE.dsw
perl %ACE_ROOT%/bin/mwc.pl -type vc6 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug"         -features mfc=1 %ACE_ROOT%/ace/ace.mwc
(3)
生成apps.dsw(需要编译其中的gperf Files)
perl %ACE_ROOT%/bin/mwc.pl -type vc6 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug"         -features mfc=1 %ACE_ROOT%/apps/apps.mwc
(4)
生成TAO.dsw
perl %ACE_ROOT%/bin/mwc.pl -type vc6 -value_template "configurations = 'MFC Release' 'MFC Debug' Release Debug"         -features mfc=1 %ACE_ROOT%/tao/tao.mwc
在执行上述命令前,最好将
TAO.mwc的内容改为:
// TAO.mwc,v 1.2 2003/08/22 15:23:48 dhinton Exp

workspace {

    exclude {

      CIAO

      examples

      performance-tests

      tests

      orbsvcs/tests

      orbsvcs/performance-tests

      orbsvcs/examples

    }

}

否则,过多的测试工程将使得上述命令需要很长的时间才能执行完毕。

如果想用mpc生成其它类型的工程文件,可以修改它的参数。具体可以参考MPC的说明文档http://downloads.ociweb.com/MPC/MakeProjectCreator.pdf


2
、编译顺序
需要用到的服务是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
Codeset Files
AnyTypeCoded Files
POA PortableServer Files
名字和事件服务 IORTable Files
Svc Utils Files
CosNaming_IDL Files
CosNaming Files
CosNaming_Skel Files
Valuetype Files
CodecFactory Files
PI Files
Messaging Files
CosNaming_Serv Files
Naming_Service Files
CosEvent_IDL Files
CosEvent Files
CosEvent_Skel Files
DynamicInterface Files
IFR_Client Files
CosEvent_Serv Files
CosEvent_Service Files
NT_Naming_Service Files
-----------------------------------------------------------------
TAO
的主页上有一个可以自动编译所有TAO工程的脚本, 只是不知道在哪里.

3
、编译后得到的文件分散于各目录中:


可执行程序和动态链接库文件: $ACE_ROOT/bin

lib
文件: $(ACE_ROOT)/ace,
$(TAO_ROOT)/tao,

$(TAO_ROOT)/orbsvcs/orbsvcs

头文件: $(ACE_ROOT),
$(TAO_ROOT),

$(TAO_ROOT)/orbsvcs

4ACEDLLLIB的命名规则:
当使用MSVC编译时的命名规则如下:

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


5
、 测试TAO
TAO
的测试代码位于TAO_ROOT/tests目录下。有一个vc的工程文件:
TAO_tests.dsw
来编译所有的测试代码。

6
、编译时遇到的错误:
1)形如:
LINK : fatal error LNK1181: cannot open input file "TAO_AnyTypeCoded.lib"
Error executing link.exe.

解决方法:调整编译顺序,将提示的AnyTypeCode Files 放在前面编译
(2)
形如:
Cannot open source file: 'E:/ACE_wrappers/TAO/orbsvcs/orbsvcs/CosNamingC.cpp': No such file or directory
CosNamingC.cpp

这是因为没有编译IDL文件,将CosNaming_IDL Files 放在前面编译

参考:Mentoya. TAO使用指南.
http://docs.huihoo.com/ace_tao/tao_guide.html

 
原创粉丝点击