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

From: Masaharu Goto (MXJ02154@nifty.ne.jp)
Date: Thu Aug 17 2000 - 14:53:47 MEST


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