Chinaunix首页 | 论坛 | 博客
  • 博客访问: 244080
  • 博文数量: 28
  • 博客积分: 1080
  • 博客等级: 少尉
  • 技术积分: 327
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-28 21:21
文章分类
文章存档

2011年(14)

2010年(14)

我的朋友

分类: C/C++

2011-05-10 15:45:10


http://hi.baidu.com/shuiyuan2004/blog/item/188169dabc6690dab6fd4890.html

将网上下载的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的说明文档


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 放在前面编译

阅读(4049) | 评论(0) | 转发(0) |
0

上一篇:ACE安装在VC6环境下

下一篇:没有了

给主人留下些什么吧!~~