Hi Stephen,
I assume that all your classes (eg Foo) have a ClassDef in the header
file.
I cc your mail to the two Darwin experts Keisuke Fujii and George M. Irwin
Rene Brun
On Fri, 6 Sep 2002, Stephen Sanders wrote:
> Hi Rene,
> I believe I am doing this step correctly. Or, at least, what I am doing
> works under
> linux. For the user class I have
> --------------------------------------------------
> rootcint -f foodict.cxx -c -p -O -pipe -fPIC -I/usr/local/include/root
> -I/usr/X11R6/include -I/usr/X11R6/include/X11 -DDARWIN
> -I/usr/local/include/brat foo.h fooInclude.h fooLinkDef.h
>
> c++ -DPACKAGE=\"foo\" -DVERSION=\"1.0\" -DONL_unix=1 -I. -I. -O -pipe
> -fPIC -I/usr/local/include/root -I/usr/X11R6/include
> -I/usr/X11R6/include/X11 -DDARWIN -I/usr/local/include/brat -ldl -c
> foodict.cxx -Wp,-MD,.deps/foodict.TPlo -fno-common -DPIC -o foodict.lo
>
> c++ -dynamiclib -flat_namespace -undefined suppress -o
> .libs/libfoo.0.0.0.dylib foo.lo foodict.lo -ldl -ldl -lm -lc
> -install_name /Users/sanders/lib/foo/libfoo.0.dylib
> -compatibility_version 1 -current_version 1.0
> --------------------------------------------------------
> (I just noticed this was not in the make.log file that I posted. I had
> previously created the dictionary file.)
>
> Then, for the main TRint derived class:
>
> ----------------------------------------------------------------
> rootcint -f BrRintDict.cxx -c -O -pipe -fPIC -I/usr/local/include/root
> -I/usr/X11R6/include -I/usr/X11R6/include/X11 -DDARWIN
> -I/usr/local/include/brat BrRint.h
>
> c++ -ldl -o .libs/bratroot -Xlinker -bind_at_load -L/usr/local/lib/root
> -lCore -lCint -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript
> -lMatrix -lPhysics -lEG -lMySQL -lm -ldl -L/usr/local/lib -lBratDataAbc
> -lBratDataParams -lBratModuleAbc -lBratModuleUtil -lBratManager
> -lBratUtil -lBratDb -lBratDb -lBratDataCalib -lBratDataCentrality
> -lBratDataGeant -lBratDataParams -lBratDataPid -lBratDataRaw
> -lBratDataRdo -lBratDataTrack -lBratDataVertex -lBratModuleCalib
> -lBratModuleCent -lBratModuleSimul -lBratModuleVisual -lBratModuleIO
> -lBratModulePid -lBratModuleRaw -lBratModuleRdo -lBratModuleTrack
> -lBratModuleVertex -lBratPackages -L/usr/X11R6/lib -lRint -lSM -lICE
> -lX11 -lXpm BrRintMain.o BrRint.o BrRintDict.o -lRint -L.libs -lfoo -ldl
> -ldl -lm
> ---------------------------------------------------------------
>
> Above, the new user library is .libs/libfoo.dylib. I also have linked
> in the various BRAT libraries (all created with
> rootcint), however none of the library classes are available unless I
> add code like:
>
> #include "foo.h"
> Foo foo;
>
> in the main program.
>
> Any other suggestions??
>
> Regards,
> Steve
>
> On Friday, September 6, 2002, at 08:56 AM, Rene Brun wrote:
>
> > Hi Stephen,
> >
> > If you want to call your BRAT classes interactively from CINT, your
> > classes must be known to CINT via the dictionary created with rootcint.
> > Are you running this step?
> > See examples in Users Guide and in $ROOTSYS/test/Event
> >
> > Rene Brun
> >
> > On Fri, 6 Sep 2002, Stephen Sanders wrote:
> >
> >> Hi Damir,
> >> I do successfully generate both the .dylib and .so library files. The
> >> .so files load fine using
> >> gSystem->Load("xxx") command, and I can successfully link to classes in
> >> the .dylib libraries.
> >> My problem (I think--since it doesn't work, I'm clearly missing some
> >> important step!)
> >> is somehow related to CINT not recognizing the global symbols in the
> >> .dylib(??) files.
> >> I can force things to work OK by creating instances of the user classes
> >> in the TRint derived
> >> main program. Unfortunate, the BRAT system has hundreds of classes and
> >> so this is clearly not
> >> a very attractive solution.
> >>
> >> Regards,
> >> Steve
> >>
> >> On Friday, September 6, 2002, at 02:18 AM, Damir Buskulic wrote:
> >>
> >>> Hi,
> >>>
> >>> I had the same kind of problems. Apparently, one needs to generate TWO
> >>> libraries for each one that was generated before. One for the symbols,
> >>> one for the code.
> >>>
> >>> Can someone explain a little better why and how to do it properly ?
> >>>
> >>> I'm also still stuck to that kind of problems. ROOT works fine (so the
> >>> problem seems solved for it) but my code doesn't work, while it does
> >>> on
> >>> all other platforms.
> >>>
> >>> Cheers
> >>>
> >>> Damir
> >>>
> >>> Stephen Sanders wrote:
> >>>> Hi,
> >>>> I am attempting to port the BRAT program of the BRAHMS
> >>>> Collaboration at RHIC to Darwin. The entire BRAT system builds
> >>>> fine,
> >>>> but I'm
> >>>> having trouble linking in the brat classes with CINT so that they
> >>>> are available without doing an explicit gSystem->Load(). Instead,
> >>>> I get errors of the sort shown below. I have set DYLD_LIBRARY_PATH to
> >>>> include
> >>>> the location of my shared libraries. I am also able to explicitly
> >>>> load the user classes.
> >>>> The root classes can be accessed fine.
> >>>> The code and appropriately modified build instructions do work on
> >>>> linux systems.
> >>>> ----------------
> >>>> brat [0] Foo * foo = new Foo() <---ON LINUX SYSTEMS THIS WORKS
> >>>> Error: Symbol Foo is not defined in current scope
> >>>> FILE:/var/tmp/tmp.2.012580_cint LINE:1
> >>>> Error: Symbol Foo is not defined in current scope
> >>>> FILE:/var/tmp/tmp.2.012635_cint LINE:1
> >>>> Error: type Foo not defined FILE:/var/tmp/tmp.2.012635_cint LINE:1
> >>>> Warning: Automatic variable Foo* foo allocated in global scope
> >>>> FILE:/var/tmp/tmp.2.012635_cint LINE:1
> >>>> Error: Undeclared variable Foo* foo FILE:/var/tmp/tmp.2.012635_cint
> >>>> LINE:1
> >>>> *** Interpreter error recovered ***
> >>>> brat [1] gSystem->Load("foo") <----THIS WORKS
> >>>> (int)0
> >>>> brat [2] Foo * foo = new Foo("a","a")
> >>>> a
> >>>> -------------------------
> >>>> If I start the TRint derived main program in gdb,
> >>>> I am able to set breakpoints on the user class Foo,
> >>>> but autocompletion does not return the argument lists:
> >>>> [kunuc5:~/Documents/foo] sanders% gdb ~/bin/bratroot
> >>>> This GDB was configured as "powerpc-apple-macos10".
> >>>> Reading symbols for shared libraries .. done
> >>>> (gdb) break main
> >>>> Breakpoint 1 at 0x2854
> >>>> (gdb) run
> >>>> Starting program: /Users/sanders/bin/bratroot
> >>>> [Switching to process 12624 thread 0x1603]
> >>>> Reading symbols for shared libraries ................... done
> >>>> Breakpoint 1, 0x00002868 in main ()
> >>>> (gdb) break Foo::Foo
> >>>> Breakpoint 2 at 0x10ce228
> >>>> (gdb)
> >>>> ---------------------------------------------------------------
> >>>> To test the system, I've built a simple library libfoo with a single
> >>>> class Foo. This
> >>>> is linked to a TRint derived class BrRint as shown below: (I've
> >>>> supplied links to the
> >>>> actual programs.) Again, I've moved this to a linux system, commented
> >>>> out the MODULE
> >>>> stuff, and everything works as it should.
> >>>> ----------------------------------------------------------------
> >>>> AM_CPPFLAGS = -O -pipe -fPIC -I/usr/local/include/root
> >>>> -I/usr/X11R6/include -I/usr/X11R6/include/X11
> >>>> ROOTLIBS=-L/usr/local/lib/root -lCore -lCint -lHist -lGraf -lGraf3d
> >>>> -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lm -ldl
> >>>> XLIBS= -L/usr/X11R6/lib -lRint -lSM -lICE -lX11 -lXpm
> >>>> LIBNAME =libfoo.la
> >>>> MODULE =foo.la
> >>>> pkglib_LTLIBRARIES = $(LIBNAME) $(MODULE)
> >>>> pkginclude_HEADERS = "http://www.phsx.ukans.edu/~sanders/foo/foo.h"
> >>>> libfoo_la_SOURCES = "http://www.phsx.ukans.edu/~sanders/foo/foo.cxx"
> >>>> foodict.cxx
> >>>> libfoo_la_LDFLAGS = -ldl -lm -R$(HOME)/Documents/foo/.libs
> >>>> foo_la_SOURCES = $(libfoo_la_SOURCES)
> >>>> foo_la_LDFLAGS = -module -Xlinker -bind_at_load $(ROOTLIBS)
> >>>> -R$(HOME)/Documents/foo/.libs
> >>>> bin_PROGRAMS = bratroot
> >>>> bratroot_LDADD = -lRint libfoo.la
> >>>> bratroot_LDFLAGS = -Xlinker -bind_at_load $(ROOTLIBS) $(XLIBS)
> >>>> bratroot_SOURCES =
> >>>> "http://www.phsx.ukans.edu/~sanders/foo/BrRintMain.cxx" \
> >>>> "http://www.phsx.ukans.edu/~sanders/foo/BrRint.cxx"
> >>>> "http://www.phsx.ukans.edu/~sanders/foo/BrRint.h" \
> >>>> BrRintDict.h BrRintDict.cxx
> >>>> CLEANFILES = *Dict.*
> >>>> %dict.cxx %dict.h:%.h
> >>>> rootcint -f $*dict.cxx -c -p $(AM_CPPFLAGS) $< $*Include.h
> >>>> $*LinkDef.h
> >>>> %Dict.cxx %Dict.h:%.h
> >>>> rootcint -f $*Dict.cxx -c $(AM_CPPFLAGS) $<
> >>>> -----------------------------------------------------------------------------------------------------------------------------------
> >>>> The resulting Makefile is:
> >>>> "http://www.phsx.ukans.edu/~sanders/foo/Makefile"
> >>>> The log of the make operation is at :
> >>>> "http://www.phsx.ukans.edu/~sanders/foo/make.log"
> >>>> Any suggestions? Has anyone been successful getting someting like
> >>>> this to work
> >>>> under Darwin?
> >>>> Thanks for any help...
> >>>> Steve
> >>>
> >>>
> >>>
> >>> --
> >>> =====================================================================
> >>> | Damir Buskulic | Universite de Savoie/LAPP |
> >>> | | Chemin de Bellevue, B.P. 110 |
> >>> | Tel : +33 (0)450091600 | F-74941 Annecy-le-Vieux Cedex |
> >>> | e-mail: buskulic@lapp.in2p3.fr | FRANCE |
> >>> =====================================================================
> >>> mailto:buskulic@lapp.in2p3.fr
> >>
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:08 MET