ACE、TAO、CIAO


1.1.1 ACE

ACE 自适配通信环境(ADAPTIVE Communication Environment)是可自由使用、开放源码的面向对象(OO)框架(framework) ,它实现了许多用于并发通信软件的核心模式。

ACE 提供了一组丰富的可重用 C++包装外观(wrapper facade)和框架组件,可跨多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。

ACE 的目标用户是高性能和实时通信服务和应用的开发者。它简化了使用进程间通信、事件多路分离、显式动态链接和并发的 OO网络应用和服务的开发。此外,通过服务在运行时与应用的动态链接,ACE 使系统的配置和重配置得以自动化。

1.1.2 TAO

The ACE ORB(TAO) :TAO 是使用 ACE 提供的框架组件和模式构建的 CORBA 实时实现,包含有网络接口、OS、通信协议和 CORBA 中间件组件及特性。TAO 基于标准的 OMG CORBA 参考模型,并进行了增强的设计,以克服传统的用于高性能和实时应用的 ORB 的缺点。TAO像 ACE 一样,也是可自由使用的开放源码软件。

1.1.3 CIAO

CIAO(Component Integrated ACE ORB)则是在TAO基础上的一个CORBA Component Model实现,同时CIAO也是目前相对比较成熟的一个CCM实现。

1.  下载 ACE 5.7.
从 http://download.dre.vanderbilt.edu/ 下载 ACE+TAO+CIAO-5.7.tar.gz包。

2.  解压
将压缩包copy到linux目录/data/ACE里,然后解压, tar -zxvf ACE+TAO+CIAO-5.7.tar.gz。
解压后的目录是 /data/ACE_wrappers.

3.  配置config.h和platform_macros.GNU。
官方文档上是这么写的:
Create a configuration file, $ACE_ROOT/ace/config.h, that includes the appropriate platform/compiler-specific header configurations from the ACE source directory. For example: 
#include "ace/config-linux.h"

Create a build configuration file, $ACE_ROOT/include/makeinclude/platform_macros.GNU, that contains the appropriate platform/compiler-specific Makefile configurations, e.g., 
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU

在实际操作中也可以直接创建一个软链接:
cd $ACE_ROOT/ace 
ln -s config-linux.h config.h
cd $(ACE_ROOT)/include/makeinclude/
ln -s platform_linux.GNU platform_macros.GNU


3.  configure
    cd ACE_wrappers/
    mkdir build
    ../configure
    等几分钟后configure完成。

4.  make
    在ACE_wrappers/build目录下, 执行$make 
    make完以后,在/data/ACE/ACE_wrappers/build/ace/.libs/目录下,能找到libACE.so和libACE-5.7.so.
    
    make特别慢,尤其是ACE+TAO+CIAO在一起的这个包,make要好几个小时。如果TAO和CIAO用不着的话,只下载ACE的就可以了,可以省点时间。 

5.  install
    在ACE_wrappers/build下执行#make install
    make install之后,会在/usr/local/include下找到好几个ace相关的文件夹,里面有include需要的头文件。
    在/usr/local/lib下找到一堆ACE相关的.so文件,包括libACE.so等等。
    
    linux下系统查找include文件的顺序是(这段是网上摘抄的):
    /usr/include
    /usr/local/include
    /usr/lib/gcc-lib/i386-linux/2.95.2/include
    /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include
    /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
    查找lib文件的顺序是
    /lib
    /usr/lib
    而ACE的lib所在的目录是 /usr/local/lib,所以要注意为lib配置环境变量。

6.  配置环境变量
    配置.bashrc
    ~/.bashrc:
    ACE_ROOT=/home/cs/faculty/schmidt/ACE_wrappers; export ACE_ROOT 
    LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH
    配置完环境变量执行以下 . ~/.bashrc
    或者注销重新登录一下。

    配置ld.so.conf
    打开/etc/ld.so.conf
    本来内容是如下:
    include ld.so.conf.d/*.conf
    我们添加ace路径后变成如下
    include ld.so.conf.d/*.conf
    /usr/local/lib
    保存退出
    然后执行    ldconfig

7  用gcc测试一下。
   写小程序:

hello.cpp

#include "ace/OS.h"
#include "ace/Log_Msg.h"
int main (int argc, char *argv[])
{
ACE_DEBUG((LM_DEBUG,"Hello, ACE! "));
ACE_OS::exit(1);
return 0;
}

编译:
[root@linuxvm1 test]# gcc -p -o hello hello.cpp -I /data/ACE/ACE_wrappers -L /data/ACE/test/ -l ACE -lz -lm
编译的时候-l要写ACE,而不是libACE.so
执行:
[root@linuxvm1 test]# ./hello
./hello: error while loading shared libraries: libACE-5.7.so: cannot open shared object file: No such file or directory
[root@linuxvm1 test]# export LD_LIBRARY_PATH=/data/ACE/test
[root@linuxvm1 test]# ./hello
Hello,ACE!


8  用KDevelop测试一下。
把/data/ACE/ACE_wrappers/examples/C++NPv1里面的 Iteractive_Logging_Server(Iteractive_Logging_Server.cpp, Iteractive_Logging_Server.h,Logging_Handler.cpp,Logging_Handler.h,Logging_Server.cpp,Logging_Server.h) 和Logging_Client(Logging_Client.cpp)两个project加到KDevelop里面。
然后配置一下用到的lib:在Project Options->Configure Options -> General->Linker flags(LDFLAGS)中添加 /usr/local/lib/libACE.so.
然后build。
执行#./iteractive_logging_server 9999
执行#./logging_client 9999

执行成功。

ace

9. eclipse中配置:
   Project -> Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC C++ Linker -> Libraries
   Libraries(-l)添加:ACE
   Library search path(-L)添加: /usr/local/lib/

10.在VS2005上创建工程的问题。
主要是要在工程属性里做一下配置,具体配置就参考自带的那些例子里面的工程的配置就可以了。
随便打开一个工程,挨个对一下上面的配置,就可以跑了。


注:有时候会报undefined reference to的错误,可能是.so文件没有找到。比如这种情况。
[root@linuxvm1 test]# gcc -p -o hello hello.cpp -I /data/ACE/ACE_wrappers -L /data/ACE/test/libACE.so -lz -lm
/tmp/ccPse7FN.o(.text+0x22): In function `main':
: undefined reference to `ACE_Log_Msg::last_error_adapter()'
/tmp/ccPse7FN.o(.text+0x2a): In function `main':
: undefined reference to `ACE_Log_Msg::instance()'
/tmp/ccPse7FN.o(.text+0x44): In function `main':
: undefined reference to `ACE_Log_Msg::conditional_set(char const*, int, int, int)'
/tmp/ccPse7FN.o(.text+0x59): In function `main':
: undefined reference to `ACE_Log_Msg::log(ACE_Log_Priority, char const*, ...)'
/tmp/ccPse7FN.o(.text+0x66): In function `main':
: undefined reference to `ACE_OS::exit(int)'
/tmp/ccPse7FN.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值