Hi Ole, From: Ole Streicher <ole@ifh.de> Subject: [ROOT] Bug in rootcint behaviour? Date: Thu, 12 Sep 2002 16:55:10 +0200 > Hi! > > I am not sure if this is a bug or a feature or if I just didn't read > the manual carefully enough: > > When I have dictionaries to be generated in different dierectories, > their file name mus be different. When one has something like > > cd event > rootcint -f RootDict.cpp -c file1.h LinkDef.h > cd ../raw > rootcint -f RootDict.cpp -c file2.h LinkDef.h > > then every RootDict.cpp file contains some Symbols that seem to be > built from the file name, like > > extern void G__cpp_setup_tagtableRootDict(); > > and when linked together in a program (or within Root), only the first > is loaded. This causes that Root complains about missing class > definitions for all except the first loaded file. > > Is this a correct behaviour of rootcint or a bug? I had a similar problem some time ago - it's the intended behaviour as far as I understood Masa's comments back then. The solution is to make the output files have different names: # Makefile in foo # include $(top_srcdir)/config/config.mk lib_LTLIBRARIES = libFoo.la libFoo_la_SOURCES = Foo.cxx FooCint.cxx pkginclude_HEADERS = Foo.h noinst_HEADERS = FooInclude.h FooLinkDef.h # # EOF # Makefile in bar # include $(top_srcdir)/config/config.mk lib_LTLIBRARIES = libBar.la libBar_la_SOURCES = Bar.cxx BarCint.cxx pkginclude_HEADERS = Bar.h noinst_HEADERS = BarInclude.h BarLinkDef.h # # EOF # $(top_srcdir)/config/config.mk # %Dict.cxx %Dict.h:%Include.h %LinkDef.h @ROOTCINT@ -f %Dict.cxx -c $(AM_CPPFLAGS) $(INCLUDES) $^ # # EOF BTW, this also works in you have one-Makefile builds (need newer Autotools): # $(top_srcdir)/Makefile # lib_LTLIBRARIES = pkginclude_HEADERS = noinst_HEADERS = include foo/Makefile include bar/Makefile %Dict.cxx %Dict.h:%Include.h %LinkDef.h @ROOTCINT@ -f %Dict.cxx -c $(AM_CPPFLAGS) $(INCLUDES) $^ # # EOF # foo/Makefile # lib_LTLIBRARIES += libFoo.la libFoo_la_SOURCES = foo/Foo.cxx FooDict.cxx pkginclude_HEADERS += foo/Foo.h noinst_HEADERS += foo/FooInclude.h foo/FooLinkDef.h # # EOF # bar/Makefile # lib_LTLIBRARIES += libBar.la libBar_la_SOURCES = bar/Bar.cxx BarDict.cxx pkginclude_HEADERS += bar/Bar.h noinst_HEADERS += bar/BarInclude.h bar/BarLinkDef.h # # EOF The reason, as far as I know, for the use of the output file name in the encoding of the functions, is that CINT can call these functions safely without worrying about multiply defined symbols. Yours, ____ | Christian Holm Christensen |_| | ------------------------------------------------------------- | | Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91 _| DK-2200 Copenhagen N Cell: (+45) 24 61 85 91 _| Denmark Office: (+45) 353 25 305 ____| Email: cholm@nbi.dk Web: www.nbi.dk/~cholm | |
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:09 MET