ACE 5.4 + TAO 1.4 在Solaris 10 for X86 + Sun Studio 10 上 编译全攻略

--以前的旧作,贴出来留作纪念。现在ACE都已经出到5.5。

最近有个项目需要将ACE+TAO移植到Solaris 10,因为最新的stable版本是5.4,这 个版本是2004年release,所以在Solaris 10编译,花了不少力气。Solaris 10是 2005年头release出来的。
自己也在google上苦苦搜索过,发现这方面的资料比较少,所以记录下来供大家分享。


ACE+TAO的下载:http://deuce.doc.wustl.edu/Download.html.
版本是Latest Release. The latest release is ACE 5.4, TAO 1.4, and CIAO 0.4 (ACE+TAO+CIAO x.4), 我用的是整个package; ACE-5.4+TAO-1.4+CIAO-0.4.tar.gz。

OS: Solaris 10 1/06 for X86. 下载地址:http://www.sun.com/software/solaris/get.jsp
Compiler: Sun Studio 10. 下载地址:https://jsecom8a.sun.com/ECom/EComActionServlet;jsessionid=0DE40189D1BBA6C46A0DF89DA2A5C082

Patch: http://developers.sun.com/prodtech/cc/downloads/patches/ss10_patches.html
Patch是一定要打的。因为ACE+TAO里面使用了很多高级template技术,如果不打patch的话,Sun Studio 10编译起来会有问题。
因为平台是X86的,所以要打的patch是:
C++ Compiler 117831 Sun Studio 10 C++ Compiler
x86 Compiler Backend 117846 Sun Studio 10 x86 compiler backend
C Compiler 117837 Sun Studio 10 C Compiler
dbx Debugger 118682 Sun Studio 10 debug info handling
因为我们的平台是Solaris 10, 如果你使用的Solaris 10 3/05, Solaris 10的patch也是需要的。如果你用的是上面提供的网址下载的Solaris 10 1/06, 就不需要了。

准备工作
第一步当然是gunzip, untar解包。解出来的文件名是ACE_wrapper,
然后创建环境变量
PATH=$PATH:/opt/SUNWspro/bin:/usr/sfw/bin
export PATH
ACE_ROOT=/export/home/user/ace.5.4.cc.32
export ACE_ROOT
TAO_ROOT=$ACE_ROOT/TAO
export TAO_ROOT
LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib
export LD_LIBRARY_PATH

接着制作config.h和platform_macros.GNU
创建$ACE_ROOT(default main folder name is ACE_wrapper)/ace/config.h
内容如下:
#ifndef ACE_CONFIG_H
#include "ace/config-sunos5.9.h"

#define ERRMAX 256 /* Needed for following define */
#define ACE_LACKS_SYS_NERR

#endif /* ACE_CONFIG_H */

创建$ACE_ROOT/include/makeinclude/platform_macros.GNU
内容如下
include $(ACE_ROOT)/include/makeinclude/platform_sunos5_sunc++.GNU

以上大家其实仔细看ACE+TAO Guide,上面也有介绍。不过下面的内容都是偶自己订制。
修改$(ACE_ROOT)/include/makeinclude/platform_sunos5_sunc++.GNU
在181行后,强制将templates定义成automatic
templates = automatic
--
182 templates = automatic
183 # Turn on the proper flags for explicit template instantiation.
184 #
185 ifeq ($(templates),explicit)
186 ifeq ($(TEMPLATES_FLAG),) # Turn on flags if none is speficied.
187 TEMPLATES_FLAG=-instances=explicit
188 endif
189 CPPFLAGS += -DACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION
190 endif

--
让Sun Studio 自己去自动识别处理template的定义。这步非常关键。

接着修改$(ACE_ROOT)/ace/OS_NS_sys_utsname.inl
将::uname的调用变成::nuname
这是因为include sys/utsname的时候,会找不到uname,不过不要紧,我们可以用nuname代替。

最后就是修改$(ACE_ROOT)/TAO/orbsvcs/orbsvcs/Makefile.RTKokyuEvent
将--lACE变为-lACE
虽然是个明显的bug,但是想想作为一个几十万行的开源软件,能做到这样也实数不易。

接着我们就compile,
gmake; cd TAO; gmake
整个编译过程大概花30分钟。当然编译时间的长短要看你的机器powerful的程度了。

gmake结束后,测试一下编译出来的TAO能不能用。翻出$(ACE_ROOT)/TAO/tests/Param_Test, 执行以下run_test.pl,看一下结果。tests目录下还有许多其他的测试用例,大家可以执行测试一下。

当然这个默认编译出来的版本照例是32-bit。64-bit我也试过,不行,发现里面有不少将pointer强制转换成int,看来这个版本还不支持64bit computing。

题外话:
ACE+TAO大家有可能没听说过,著名的开源Corba,里面采用了很多高级的Pattern技术,而且对操作系统平台的也很广,从Unix, Linux, Windows 一直到嵌入式系统。因此备受开发人员推崇,而且被许多跨国公司使用。大家可以通过这个网址http://www.cs.wustl.edu/~schmidt/TAO-users.html
看有谁在使用,里面有不少很著名的公司:Cisco, Nortel, Motorola, Alcatel。   #
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值