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

From: Matthew D. Langston (langston@SLAC.stanford.edu)
Date: Thu Aug 17 2000 - 18:23:59 MEST


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