<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Dear
<p>I am trying to migrate an application using OmniORB 4.0.2 on AIX 4.3
to omniORB 4.0.3 on AIX 5.2 (or AIX 4.3), and i have a problem with the
use of dynamics libraries&nbsp;&nbsp;&nbsp; libomniORB4.so.0.3, libomniDynamic4.so.0.3&nbsp;
and&nbsp; libomniCodeSets4.so.0.3.
<p>The problem arrives when :
<ul>
<li>
I'm using the dynamics libs by the '-brtl'&nbsp; link option</li>

<li>
I 'm passing the value of a string variable to an any variable, by the&nbsp;&nbsp;
&lt;&lt;=&nbsp;&nbsp; operator</li>
</ul>
To illustrate this problem, consider the file&nbsp; 'testAny.cc'
<ul>
<li>
source file :</li>

<br>#include &lt;fstream>
<br>#include &lt;iostream>
<br>#include &lt;sstream>
<br>#include &lt;list>
<br>#include &lt;string>
<br>using namespace std;
<p>#include &lt;stdlib.h>
<br>#include &lt;stdio.h>
<br>#include &lt;unistd.h>
<br>#include &lt;sys/types.h>
<br>#include &lt;sys/stat.h>
<br>#include &lt;pwd.h>
<br>#include &lt;time.h>
<br>#include &lt;signal.h>
<br>#include &lt;fcntl.h>
<p>#include &lt;omniORB4/CORBA.h>
<p>OMNI_USING_NAMESPACE(omni)
<p>//////////////////////////////////////////////////////////////////////
<p>int main(int argc, char** argv)
<br>{
<br>&nbsp; try
<br>&nbsp; {
<br>&nbsp;&nbsp;&nbsp; CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
<br>&nbsp;&nbsp;&nbsp; CORBA::Any a;
<p>&nbsp;&nbsp;&nbsp; const char* str = "Hello";
<br>&nbsp;&nbsp;&nbsp; a &lt;&lt;= str;
<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Sending Any containing String: "
&lt;&lt; str &lt;&lt; endl;
<p>&nbsp;&nbsp;&nbsp; orb->destroy();
<br>&nbsp; }
<br>&nbsp; catch(CORBA::SystemException&amp;) {
<br>&nbsp;&nbsp;&nbsp; cerr &lt;&lt; "Caught a CORBA::SystemException."
&lt;&lt; endl;
<br>&nbsp; }
<br>&nbsp; catch(CORBA::Exception&amp;) {
<br>&nbsp;&nbsp;&nbsp; cerr &lt;&lt; "Caught CORBA::Exception." &lt;&lt;
endl;
<br>&nbsp; }
<br>&nbsp; catch(...)
<br>&nbsp; {
<br>&nbsp;&nbsp;&nbsp; cerr &lt;&lt; "Caught unknown exception." &lt;&lt;
endl;
<br>&nbsp; }
<p>&nbsp; return 0;
<br>}
<br>&nbsp;
<li>
I compile an object file with the command :</li>

<br>xlC_r -g -c -DHAVE_CONFIG_H -DHAVE_OMNIORB4 -D__OMNIORB4__ -D_REENTRANT
-D_THREAD_SAFE -qstaticinline&nbsp; -D__aix__ -D__powerpc__ -D__OSVERSION__=5&nbsp;&nbsp;
-qarch=com -qnotempinc -DAIX -DPASS_END -qrtti&nbsp; -qmaxmem=8192 -qlonglong
-qlongdouble -I. -I/Projet/JULIUS/ORB/omniORB-4.0.3-AIX-5.2-xlc_r-6_Debug/include
-o testAny.o testAny.cc
<br>&nbsp;
<li>
I generate 2 binaries files :</li>

<ul>
<li>
<b>testAny_stat</b> : it has been generated with the use of the omniORB
statics libraries, like this :</li>

<br>xlC_r -o testAny_stat testAny.o -L/Projet/JULIUS/ORB/omniORB-4.0.3-AIX-5.2-xlc_r-6_Debug/lib
-lomniORB4 -lomniDynamic4 -lomnithread&nbsp; -lpthread
<li>
<b>testAny_dyn</b> : it has been generated with the use of the omniORB
dynamics librarie, like this :</li>

<br>xlC_r <b>-brtl</b> -o testAny_dyn testAny.o -L/Projet/JULIUS/ORB/omniORB-4.0.3-AIX-5.2-xlc_r-6_Debug/lib
-lomniORB4 -lomniDynamic4 -lomnithread&nbsp; -lpthread
<br>&nbsp;</ul>

<li>
I'm executing the examples :</li>

<ul>
<li>
testAny_stat : it's ok</li>

<li>
testAny_dyn : it generates a core dump file; because of an illegale instruction</li>
</ul>
</ul>
I found the reason of the core file. Each Corba Object has its own&nbsp;
cdrStream&nbsp; object. An CORBA::any&nbsp; object uses this object to
execute the&nbsp; &lt;&lt;=&nbsp;&nbsp; operator. (in cdrStream.h file,
look at the line 454)
<br>The cdrStream class has an attribut&nbsp;&nbsp; TCS_C&nbsp; pd_tcs_c.&nbsp;&nbsp;&nbsp;
In the&nbsp; cdrStream object associated to CORBA::any&nbsp; object, this
attribut has been initialised differently.
<ul>
<li>
in testAny_stat, it has a non NULL value;</li>

<li>
in testAny_dyn, it has a NULL value, who is the cause of the illegale instruction.</li>
</ul>

<p><br>I should like to know why this attribut hasn't been correctly initialized
when I used the omniORB dynamics libraries ?
<p>Thanks
<p>Bruno Delepouve
<ul>
<ul>&nbsp;</ul>
</ul>
</html>