<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">First, I know that Solaris is not really supported.<o:p></o:p></p>
<p class="MsoNormal">Second, I know that Studio 12.4 is not the newest version, but it’s what I have approved for use at this time.<o:p></o:p></p>
<p class="MsoNormal">Third, I know I’m not building the latest version of ACE/TAO. However, I’ve checked the GIT repo and the issue still exists.<o:p></o:p></p>
<p class="MsoNormal">Fourth, I have other COTS products that preclude me using the C++11 features of the compiler (!*&^#), so I’m trying to get it to be as backwards compatible with 12.2 as possible.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoPlainText">TAO VERSION: 2.3.0<o:p></o:p></p>
<p class="MsoPlainText">    ACE VERSION: 6.3.0<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    HOST MACHINE and OPERATING SYSTEM: Oracle SunFire X4270 M2 / Solaris 11.3<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    TARGET MACHINE and OPERATING SYSTEM: same<o:p></o:p></p>
<p class="MsoPlainText">    COMPILER NAME AND VERSION: Solaris Studio 12.4 (CC 5.13)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    THE $ACE_ROOT/ace/config.h FILE: config-sunos5.11.h<o:p></o:p></p>
<p class="MsoPlainText">(I created this and it includes config-sunos5.10.h and adds the following clause:<o:p></o:p></p>
<p class="MsoPlainText">#if (__SUNPRO_CC >= 0x5130)<o:p></o:p></p>
<p class="MsoPlainText">#define ACE_ANY_OPS_USE_NAMESPACE<o:p></o:p></p>
<p class="MsoPlainText">#endif<o:p></o:p></p>
<p class="MsoPlainText">)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE:<o:p></o:p></p>
<p class="MsoPlainText">ace_for_tao=1<o:p></o:p></p>
<p class="MsoPlainText">fast=0<o:p></o:p></p>
<p class="MsoPlainText">rwho=0<o:p></o:p></p>
<p class="MsoPlainText">buildbits=64<o:p></o:p></p>
<p class="MsoPlainText">threads=1<o:p></o:p></p>
<p class="MsoPlainText">CFLAGS += -std=sun03 -features=zla<o:p></o:p></p>
<p class="MsoPlainText">include $(ACE_ROOT)/include/makeinclude/platform_sunos5_sunc++.GNU<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features: N/A<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    AREA/CLASS/EXAMPLE AFFECTED: Does not link<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    DOES THE PROBLEM AFFECT:<o:p></o:p></p>
<p class="MsoPlainText">        COMPILATION?<o:p></o:p></p>
<p class="MsoPlainText">        LINKING? yes<o:p></o:p></p>
<p class="MsoPlainText">        EXECUTION?<o:p></o:p></p>
<p class="MsoPlainText">        OTHER?<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    SYNOPSIS:<o:p></o:p></p>
<p class="MsoPlainText">The Solaris Studio 12.4 compiler template rules are different from prior versions. When building TAO/orbsvcs/DevGuideExamples/NotifyService/SupplierSideNC, the build fails because<o:p></o:p></p>
<p class="MsoPlainText">TAO_Notify_Container_T<TAO_Notify_Proxy>::Destroyer::__vtbl is undefined (repeat for other instantiations; same issue exists in multiple directories)<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    DESCRIPTION:<o:p></o:p></p>
<p class="MsoPlainText">This compiler does not generate a v-table for the embedded class TAO_Notify_Container_T<T>::Destroyer (which derives from TAO_ESF_Worker<T>) because at the point of definition no virtual methods are invoked. Because of the way this class
 is used, it does not get fully instantiated when the library is built, resulting in the above link errors.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    REPEAT BY:<o:p></o:p></p>
<p class="MsoPlainText">Compiling TAO<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">    SAMPLE FIX/WORKAROUND:<o:p></o:p></p>
<p class="MsoPlainText">TAO/orbsvcs/orbsvcs/Notify/Container_T.h:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Delete embedded class Destroyer. Note that this class has an error; overridden virtual function “work()” should be declared in public scope.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">TAO/orbsvcs/orbsvcs/Notify/Container_T.cpp:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Delete the definition of TAO_Notify_Container_T<TYPE>::Destroyer::work<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">In method TAO_Notify_Container_T<TYPE>::destroy() add these lines at the beginning of the method:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">class Destroyer : public TAO_ESF_Worker<TYPE><o:p></o:p></p>
<p class="MsoPlainText">{<o:p></o:p></p>
<p class="MsoPlainText">public:<o:p></o:p></p>
<p class="MsoPlainText">                virtual void work(TYPE *type)<o:p></o:p></p>
<p class="MsoPlainText">                {<o:p></o:p></p>
<p class="MsoPlainText">                                type->destroy();<o:p></o:p></p>
<p class="MsoPlainText">                }<o:p></o:p></p>
<p class="MsoPlainText">};<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This change removes the Destroyer functor from embedded dependent scope and ensures that it can be fully instantiated when the container’s destroy method is instantiated. I wouldn’t mind an explanation from someone smarter than me.<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">--<br>
Jim Melton<br>
Software Architect, Fusion Programs<br>
Lockheed Martin RMS<br>
(720) 922-5584</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>