Re: rootcint problem

Fons Rademakers (Fons.Rademakers@cern.ch)
Wed, 18 Feb 1998 19:19:39 +0100


Hi Paolo,

in cases like this where the nesting of #ifdef's is too deep
for rootcint (only one level), try excluding problematic headers
using #ifdef __CINT__ statements. For example, assume standards.h
gives problems, but it defines a few essential types:

...
...
#ifdef __CINT__
typedef unsigned int u_int;
#else
#include <standard.h>
#endif
...
...

In other cases one needs to use the -p (preprocess option). Often
this causes to much information to be provided to rootcint which
causes it to choke up. In some case a selective preprocessing
might be better. This can be done by the following pragma's in
the LinkDef.h file:

#pragma preprocess X11/
#pragma preprocess ZIP.h

The first pragma says to preprocess all headers in dir X11, e.g.
#include <X11/Xlib.h>

and the second says to only preprocess header ZIP.h.

Cheers, Fons.

Paolo Calafiura wrote:
>
> Hi,
>
> here is my problem,
>
> origin:17:37:~/rootevent: rootcint -f EventCint.h -c -t Event.h
> LinkDef.h
> Option -c must come directly after the output file
> origin:17:55:~/rootevent: rootcint -f EventCint.cxx -c -t Event.h
> LinkDef.h
> -t : trace execution
> LOADING file=TROOT.h:/usr/local/root/include/TROOT.h:
> LOADING file=TDirectory.h:/usr/local/root/include/TDirectory.h:
> LOADING file=TNamed.h:/usr/local/root/include/TNamed.h:
> LOADING file=TObject.h:/usr/local/root/include/TObject.h:
> LOADING file=Rtypes.h:/usr/local/root/include/Rtypes.h:
> LOADING file=RConfig.h:/usr/local/root/include/RConfig.h:
> LOADING file=stdio.h:/usr/local/root/cint/include/stdio.h:
> LOADING file=DllImport.h:/usr/local/root/include/DllImport.h:
> LOADING file=Varargs.h:/usr/local/root/include/Varargs.h:
> LOADING file=stdarg.h:/usr/local/root/cint/include/stdarg.h:
> LOADING file=TStorage.h:/usr/local/root/include/TStorage.h:
> LOADING file=TBuffer.h:/usr/local/root/include/TBuffer.h:
> LOADING file=string.h:/usr/local/root/cint/include/string.h:
> LOADING file=Bytes.h:/usr/local/root/include/Bytes.h:
> Warning: File "string.h" already loaded
> LOADING file=TList.h:/usr/local/root/include/TList.h:
> LOADING file=TSeqCollection.h:/usr/local/root/include/TSeqCollection.h:
> LOADING file=TCollection.h:/usr/local/root/include/TCollection.h:
> LOADING file=TIterator.h:/usr/local/root/include/TIterator.h:
> LOADING file=TString.h:/usr/local/root/include/TString.h:
> Warning: File "string.h" already loaded
> LOADING file=TMath.h:/usr/local/root/include/TMath.h:
> LOADING file=TRefCnt.h:/usr/local/root/include/TRefCnt.h:
> LOADING file=TDatime.h:/usr/local/root/include/TDatime.h:
> LOADING file=Htypes.h:/usr/local/root/include/Htypes.h:
> LOADING
> file=TMemberInspector.h:/usr/local/root/include/TMemberInspector.h:
> LOADING file=TObject.h:/usr/local/root/include/TObject.h:
> LOADING file=Event.h:Event.h:
> LOADING file=compact.h:compact.h:
> LOADING file=rpc/rpc.h:/usr/include/rpc/rpc.h:
> Warning: File "stdio.h" already loaded
> LOADING file=rpc/types.h:/usr/include/rpc/types.h:
> LOADING file=sys/types.h:/usr/include/sys/types.h:
> LOADING file=standards.h:/usr/include/standards.h:
> Error: G__getvariable: expression FILE:/usr/include/standards.h
> LINE:128
> Error: class,struct,union or type
> defined(_XOPEN_SOURCE)||\((defined(_SGI_SOURCE)&&_NO_POSIX) not defined
> FILE:/usr/include/standards.h LINE:128
> 16695:rootcint: rld: Fatal Error: attempted access to unresolvable
> symbol in rootcint: Init__12G__ClassInfo
> origin:17:55:~/rootevent:
> LOADING file=TString.h:/usr/local/root/include/TString.h:
> Warning: File "string.h" already loaded
> LOADING file=TMath.h:/usr/local/root/include/TMath.h:
> LOADING file=TRefCnt.h:/usr/local/root/include/TRefCnt.h:
> LOADING file=TDatime.h:/usr/local/root/include/TDatime.h:
> LOADING file=Htypes.h:/usr/local/root/include/Htypes.h:
> LOADING
> file=TMemberInspector.h:/usr/local/root/include/TMemberInspector.h:
> LOADING file=TObject.h:/usr/local/root/include/TObject.h:
> LOADING file=Event.h:Event.h:
> LOADING file=compact.h:compact.h:
> LOADING file=rpc/rpc.h:/usr/include/rpc/rpc.h:
> Warning: File "stdio.h" already loaded
> LOADING file=rpc/types.h:/usr/include/rpc/types.h:
> LOADING file=sys/types.h:/usr/include/sys/types.h:
> LOADING file=standards.h:/usr/include/standards.h:
> Error: G__getvariable: expression FILE:/usr/include/standards.h
> LINE:128
> Error: class,struct,union or type
> defined(_XOPEN_SOURCE)||\((defined(_SGI_SOURCE)&&_NO_POSIX) not defined
> FILE:/usr/include/standards.h LINE:128
> 16695:rootcint: rld: Fatal Error: attempted access to unresolvable
> symbol in rootcint: Init__12G__ClassInfo
> origin:17:55:~/rootevent:
>
> the system is an SGI Origin 2000
> origin:17:56:~/rootevent: uname -a
> IRIX64 origin 6.4 02121744 IP27
>
> and I am using version 1.03/09 (I tried both versions available from
> root.cern.ch for SGI, the 5.3 and the 6.4 compiled with gcc)
>
> The file Event.h includes compact.h which is a STDC header file,
> generated by rpcgen, that contains the structures I want to read into
> Event class. I tried to simplify the problem removing the include of
> rpc.h from compact.h
> origin:18:10:~/rootevent: rootcint -f EventCint.cxx -c -t Event.h
> LinkDef.h
> .....
> LOADING file=TObject.h:/usr/local/root/include/TObject.h:
> LOADING file=Event.h:Event.h:
> LOADING file=compact.h:compact.h:
> Error: No symbol u_intNhit in current scope FILE:compact.h LINE:212
>
> looking at the relevant part of compact.h
>
> struct TAGchannel {
> int n;
> u_int Nhit; <<<<<<<<<<<<<<line 212
> struct TAGhit hit[MAX_TAG_HITS] ;
> };
> one really gets the impression that cint is somewhat confused.
>
> Cheers
> Paolo Calafiura

-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland          Phone: +41 22 7679248
E-Mail: Fons.Rademakers@cern.ch              Fax:   +41 22 7677910