Fixing build for Oracle DeveloperStudio12.5 (C++ 5.14)#461
Conversation
because it is the "first non-inline non-pure-virtual" method, and Solaris Studio Compilers automatically add some internal symbols to whereever that one gets implemented. Without an implementation of RND_Timer::push(), the linker complains about lack of symbol "RND_Timer::__descr".
For C++ 5.14, the SunCC preprocessor still separates a negative sign from a number and tao_idl segfaults on such a pre-processed .idl . Update check from (__SUNPRO_CC > 0x5120) to (__SUNPRO_CC > 0x5140)
Oracle's DeveloperStudio12.5 (C++ 5.14) compiler still has std::reverse_iterator with 6 template parameters - at least on Solaris 11.3.
partially undo commit 2e7b117 which removed it from config-sunos5.10.h rather than just adding it to config-suncc-common.h
| // Solaris Studio 12.4 implements symbol lookup correctly. | ||
| #if defined (__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) | ||
| #define ACE_ANY_OPS_USE_NAMESPACE | ||
| #endif |
There was a problem hiding this comment.
Wouldn't it be better to include config-suncc-common.h in the config-sunos5.5.h file at the moment suncc is used? That way we only have this knowledge once and all SunCC version dependent defines are in one file
There was a problem hiding this comment.
a legit question... I pondered it for a while, but then I noticed, that most of the defines currently in config-suncc-common.h were already in some of the sunos* headers. Getting each define into where it really belongs may be another year's work ;-)
There was a problem hiding this comment.
Adding the symbol (conditionally) in sunos5.10 should be fine, because the latest compilers for which it matters, 12.4 and 12.5, don't even offer installation on any older sunos than 5.10.
config-suncc-common seems to be only included by config-linux.
| this->driver_->event (event); | ||
| } | ||
|
|
||
| void |
There was a problem hiding this comment.
Why isn't this one in the header? This operation shouldn't be needed, maybe report a bug to Oracle?
There was a problem hiding this comment.
The question is rather: if this method isn't ever called, then why is it declared as an override in RND_Timer class at all?
It's a very old and apt heuristic to generate certain class-data into whichever module defines the first "non-inline non-pure-virtual" method, i.o.w.: the first method that is expected to end up in a .o file.
removing the push from RND_Timer completely would be fine with me, as well.
PS: and keep in mind to never let operator<<=(unsigned char) in CORBA::Any move to that particular place.
There was a problem hiding this comment.
Just remove it from rnd_timer
There was a problem hiding this comment.
tried a test compile, but it seems like I've spoiled my ACE build tree with a "wrong-env" make. might take a bit longer than expected, but once the compile passes the stage where Random.o gets linked I'll prepare the commit & PR.
There was a problem hiding this comment.
Done. (obviously it doesn't matter, if a class has only inline methods/ctors)
These changes were necessary to get a complete successful build with the Oracle's developerstudio12.5 on Solaris 11.3 including examples and tests.
I'm not sure whether the tests are also run, or merely compiled with a plain "make" within each of ACE_ROOT and TAO_ROOT.
I can't test it on any other platform, but I am positive that these changes would fix more than break.
Having someone test it e.g. with DeveloperStudio12.5 on Linux (just to be safe) wouldn't hurt, though.