Re: Compiling vs loading library libEvent.so : USE the ROOT SCRIPT COMPILER

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Jan 26 2000 - 08:37:22 MET


Hi Mark,
 When you compile, you do not need to specify the shared lib.
You have to specify all includes necessary to compile the code.
I want to emphasize again the nice facility provided by
the Root script compiler facility. See below

Rene Brun

Script Compiler
  ===============
  This new ROOT facility facilitates the use of an external compiler to
  'interpret' a C++ root macro (script).  The external compiler will
  be called to create a shared library that is automatically loaded.

  The interface is simple and extend the use of the .X, .x and .L cint
commands.
  For any of this command if '++' is appended to the name of the script
file,
  the script compiler is invoked.  For example:

        .X myFunc.C++(arg1,arg2)

  will compile the file myFunc.C, load the resulting shared library and
  invoke the function myFunc(arg1,arg2).  (As as reminder if the ++ is
  dropped, the cint interpreter is used to parse and execute the
script).

  The script compiler cannot currently digest any C++ code that does
contain
  a 'main' function or the redefinition of any ROOT global variables
(like
  TROOT).  For the script to be both understandable by cint (via .X
myFunc.C )
  and by the script compiler (via .X myFunc.C++ ) follow the following
  rules (some of these made be relaxed at a latter date):

    - contain all needed include files.
    - contain forward declaration for all classes used in function
declaration
          (this need to be visible by cint)
    - If the script has a supporting header file, for example defining
some
          extra classes, the header has to be in the same directory as
the
          script in order for its content to be available directly from
          the command prompt.

  For example:

  // This is a ROOT Script myScript.C
  // that just draw and fit and histogram

  #include "TH1.h"
  class TH1;

  void myScript( TH1* h, const char * formula ) {
    h->Draw();
    h->Fit(formula);
  }


  The script compiler is set to use the same compiler and compiler flags
  as ROOT.  This can be modified using the following new methods in the
  TSystem class: Get/SetIncludePath, Get/SetMakeSharedLib and
  Get/SetMakeExe.  Typically only the include should need to be
modified.
  For example:

    gSystem->SetIncludePath("-I$ROOTSYS/include
-I$HOME/mypackage/include");

  For more details refer to the documentation of TSystem::CompileMacro
and
  TSystem::SetMakeSharedLib.

We are currently working on an extension of this facility.
Fututure versions of Root should be able to detect automatically
the list of include files.





Mark James Boland wrote:
> 
> Hello ROOT useres,
> 
> I have a macro to do my analysis using ROOT but I would like to speed it
> up by compiling it into an executable. My analysis macro uses a library
> libEvent.so which I load with the statement
> 
>   gSystem.Load("libEvent.so");// Load event and scaler classes
> 
> How do I include this library when compiling?
> 
> Thanks,
> Mark
> 
> ___________________________________________________________________
> Mark Boland                           markjb@physics.unimelb.edu.au
> School of Physics                     PhD Student
> The University of Melbourne           Photonuclear Group
> Fax: +61 3 9347 4783                  Ph: +61 3 9344 5426



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