RE: [ROOT] RE:2.25.01: revisiting the "function in a n

From: Philippe Canal (pcanal@popgtw.fnal.gov)
Date: Fri Aug 18 2000 - 23:17:29 MEST


Hi Matthew,

You can create the dictionary in your case by either

specifying the exact signature of the function:

   #pragma link C++ function MDL::WAB::cross_section(double*,double*);

or simply removing the call.  Just using the namespace statement
should be enough.

Philippe.

> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
> [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matthew D. Langston
> Sent: Thursday, August 17, 2000 11:24 AM
> To: Masaharu Goto
> Cc: roottalk@pcroot.cern.ch
> Subject: Re: [ROOT] RE:2.25.01: revisiting the "function in a n
> 
> 
> Hi Masa,
> 
> Adding the two namespace pragmas doesn't solve the problem, as CINT still
> produces the same error message.  So, it appears that it is still 
> impossible
> to use compiled functions nested in namespaces from CINT.
> 
> I have attached two simple files, "cross_section.hxx" and
> "cross_section_LinkDef.h", which you can use to try the 
> experiment yourself.
> If you type the following command, then you will get the following error
> message:
> 
> $ rootcint -f cross_sectionDict.cxx -c cross_section.hxx
> cross_section_LinkDef.h
> Note: link requested for unknown function MDL::WAB::cross_section
> FILE:cross_section_LinkDef.h LINE:27
> Note: operator new() masked 1c
> Note: operator delete() masked 1c
> 
> Thank you for taking the time to look into this for me.  If I can provide
> any more information, please let me know.
> 
> Regards, Matt
> 
> ----- Original Message -----
> From: "Masaharu Goto" <MXJ02154@nifty.ne.jp>
> To: <langston@SLAC.Stanford.EDU>
> Cc: <roottalk@pcroot.cern.ch>
> Sent: Thursday, August 17, 2000 5:53 AM
> Subject: [ROOT] RE:2.25.01: revisiting the "function in a n
> 
> 
> > Hello Matthew,
> >
> > I think this is fixed indeed.  You need to add 2 more lines.
> >
> >   #pragma link C++ namespace MDL;
> >   #pragma link C++ namespace MDL::WAB;
> >
> > Thank you
> > Masaharu Goto
> >
> >
> > >Date: Wed, 16 Aug 2000 20:52:01 -0700
> > >From: "Matthew D. Langston" <langston@SLAC.Stanford.EDU>
> > >To: Masaharu Goto <MXJ02154@nifty.ne.jp>
> > >Cc: roottalk <roottalk@pcroot.cern.ch>
> > >Subject: 2.25.01: revisiting the "function in a namespace" problem
> > >
> > >Hi Masa,
> > >
> > >Back in the early part of April you were helping me with the problem of
> how
> > >to export a function, which is nested in a namespace, from a shared
> library
> > >so that it is available from the CINT interpreter.
> > >
> > >At the time, you said that the problem was fixed in CINT 5.14.26.
> However,
> > >the problem still exists in ROOT 2.25.01, which uses CINT 5.14.44.  Did
> the
> > >namespace support get broken again somehow?
> > >
> > >I have attached the two e-mails from our previous discussion to remind
> you
> > >of what the problem was (it includes an example you can try to test the
> bug
> > >for yourself).  FYI, all of these e-mails (and others from the thread)
> are
> > >in roottalk beginning on 2000.04.03 if you need to refer to 
> them for more
> > >detail.
> > >
> > >Can you. or another knowledgeable CINT internals expert, help me with
> this
> > >problem please?  Thank you.
> > >
> > >--
> > >Matthew D. Langston
> > >SLD, Stanford Linear Accelerator Center
> > >langston@SLAC.Stanford.EDU
> > >
> >
> >-----------------------------------------------------------------
> ----------
> --
> > -
> > --
> > >Date: Mon, 03 Apr 2000 10:49:01 -0700
> > >From: "Matthew D. Langston" <langston@SLAC.Stanford.EDU>
> > >Reply-To: langston@SLAC.Stanford.EDU
> > >To: roottalk@pcroot.cern.ch
> > >Subject: [ROOT] ROOT 2.23.12: Accessing functions in a namespace from a
> > sharedlibrary
> > >
> > >How do I export a function, which is nested in a namespace, from a
> > >shared library so that it is available from the CINT interpreter?
> > >
> > >Here is a concrete example of the function that I am trying to export
> > >from a shared library to CINT.  The function, named 
> "cross_section" (see
> > >below), is nested inside of multiple namespaces.  Here is the contents
> > >of the header file which declares "cross_section":
> > >
> > >  // cross_section.hxx
> > >  namespace MDL
> > >  {
> > >     namespace WAB
> > >     {
> > >        double cross_section( double* variables, double* parameters );
> > >     }
> > >  }
> > >
> > >
> > >Finally, here is the relevant part of the LinkDef.h file that I am
> > >trying to use to export "cross_section" from the shared library to the
> > >CINT interpreter:
> > >
> > >
> > >  // LinkDef.h
> > >  #pragma link C++ function MDL::WAB::cross_section;
> > >
> > >
> > >This doesn't work, as evidenced by the following error message when I
> > >try to run rootcint on these two files:
> > >
> > >
> > >  $ rootcint -f cross_sectionDict.cxx -c cross_section.hxx LinkDef.h
> > >  Note: link requested for unknown function MDL::WAB::cross_section
> > >FILE:LinkDef.h LINE:21
> > >
> > >
> > >The pragma that I used (above) was the most straightforward method I
> > >could think of to export the function "cross_section".  Since it didn't
> > >work, I also tried various combinations of the pragmas 
> documented in the
> > >CINT Reference Manual (see http://root.cern.ch/root/Cint.phtml?ref and
> > >search for "#pragma").  In particular, I tried various combinations of
> > >the following two pragmas that seemed to have something to do with
> > >namespaces:
> > >
> > >
> > >  #pragma link [C|C++|off] [class|struct|union|enum|namespace] [name];
> > >  #pragma link [C|C++|off] defined_in [class/struct/namespace name];
> > >
> > >
> > >However, I could find no documentation on how to use these two specific
> > >pragmas.  Would someone knowledgeable please instruct us in the use of
> > >these two pragmas?  Would the use of some combination of these two
> > >pragmas solve my problem with exporting the "cross_section" function
> > >from a shared library to the CINT interpreter?
> > >
> > >I have attached both of the files "cross_section.hxx" and 
> "LinkDef.h" in
> > >their entirety to this e-mail so that others could try and run the
> > >command
> > >
> > >  $ rootcint -f cross_sectionDict.cxx -c cross_section.hxx LinkDef.h
> > >
> > >on them.  Please let us know if you can find the correct combination of
> > >the CINT pragmas that allow rootcint to run properly on these 
> two files.
> > >Thank you.
> > >
> > >
> > >--
> > >Matthew D. Langston
> > >SLD, Stanford Linear Accelerator Center
> > >langston@SLAC.Stanford.EDU
> > >
> > >
> >
> >-----------------------------------------------------------------
> ----------
> --
> > -
> > --
> > >Date: Mon, 10 Apr 2000 14:31:28 -0700
> > >From: Masaharu Goto <MXJ02154@nifty.ne.jp>
> > >To: langston@SLAC.Stanford.EDU
> > >Cc: pcanal@fnal.gov, roottalk@pcroot.cern.ch
> > >Subject: RE:Re: [ROOT] ROOT 2.23.12: Accessing funct
> > >
> > >Hello Matthew,
> > >
> > >I can not try it on ROOT because of some reason, but your code 
> works fine
> > >on pure cint. After adding definition of cross_section() function,
> > >
> > >  $ makecint -mk makefile -dl cross_section.dll -H cross_exction.hxx
> > >LinkDef.h
> > >  $ make -f makefile
> > >  $ cint cross_section.dll
> > >  cint> p MDL::WAB::cross_section(0,0)
> > >  (double)0.000000
> > >  cint>
> > >
> > >After writting above message, I noticed that you use 5.14.25. 'pragma
> link
> > >C++ namespace' is supported after 5.14.26. No wonder you can not do it.
> > >In that case, try  '#pragma link C++ class [namespacename];' instead.
> > >There is no difference. If this doesn't work either , please download
> > >newer version.
> > >
> > >Thank you
> > >Masaharu Goto
> > >
> > >
> > >>
> > >>Hi Masaharu,
> > >>
> > >>I had already tried the two namespace pragmas that you suggested (I
> > >>hinted at this in my original e-mail), and they don't work 
> either.  So,
> > >>the problem/question remains - how do I import a function in 
> a namespace
> > >>even though I am already using the two pragmas that you recommend?  I
> > >>have attached the two files that are necessary to run the following
> > >>command, which demonstrates the problem:
> > >>
> > >>  $ rootcint -f cross_sectionDict.cxx -c cross_section.hxx LinkDef.h
> > >>
> > >>Were you actually able to verify that you can run the above command
> > >>without problems?  It definitely does not work with ROOT 
> 2.23.12 (which
> > >>corresponds to CINT 5.14.25).
> > >>
> > >>Thank you for your help and expertise.
> > >>
> > >>
> > >
> >
> 



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:31 MET