Problem:

  • Product Name: VisiBroker for C
  • Product Version: 6.5, 7.0, 8.x
  • Product Component: ORB, IBM XL C/C Compiler
  • Platform/OS Version: AIX
The application using ServantManager compiled with "rtti" option of IBM Visual Age compiler run into fatal error of "symbol was not found".

# ./Server

Could not load program Server:

rtld: 0712-001 Symbol __vft29PortableServer_ServantManager17CORBA_LocalObject was referenced

from module ./libBankLocator.so(), but a runtime definition

of the symbol was not found.

rtld: 0712-002 fatal error: exiting.

Resolution:

RTTI (Run-Time Type Information) is a C construct which allows applications to check at runtime the dynamic type of an object. The mechanism allows programmers to determine the dynamic type of a pointer. This effectively allows safe 'down-casting' of object types.

The issue occurs when mixed objects compiled (-qrtti specified for some objects, -qnortti specified for others). Please refer to the IBM XL C/C Compiler Reference on rtti for more details.

In most of the cases, the application is compiled/built with -qrtti while VisiBroker libraries are not. The VisiBroker does not use "rtti" as it results in 30%-40% performance degradation. And there is no plan to build with "rtti" enabled to all libraries of VisiBroker due to serious performance problem.

Note: If the rational of "rtti" is to use dynamic_cast<>, there is a workaround of implementing "double dispatch" or "visitor" patterns to replace the use of dynamic_cast<> and the application is freed from "rtti" option.
 
 

Reference

 

Incident: #2474918