Thanks, I found three problems and now it works. I will mention them for future troubleshooting. 1. I compiled on linux machine with source files on disks of Solaris machine - created non-deterministic behaviour. 2. somehow one of the constructors had inline before definition 3. rootcint has a problem of finding info about the class if there are more than one class or struct per file. Since I don't call these classes directly I didn't create any dictionary for them at the end. Miro > Hi Miro, > > > 1; Well .L myfile.cxx works, but .. Is there a way to add it as a shared > >Library without adding all ClassDef etc. macros? Adding them makes my > >code not to compile in different application. I don't want > >any I/O. If I make a shared library without all that it compiles fine, > >but Cint doesn't recognize my classes. > > To have a class in a shared library, be able to be seen by cint, you do > need a dictionary (running rootcint) but you do not need ClassDef and > ClassImp. > Also for simple classes (i.e. class defined in one header, one source file), > you can use ACLiC and just type: > .L myfile.cxx++ > It will take care of the rootcint and compilation step for you. > > > root [0] .L pdf.so > >dlopen error: /nevis/nevis11/helbich/xF3/mrst/./pdf.so: undefined symbol: > >DeclFileLine__4MPdf > > This is odd .... Pdf::DeclFileLine should declare AND implement by the > ClassDef macro inside your Pdf class. One case where I have seen something > like that was when I forgot to implement some of the virtual function of > my class (but usually it complains of a few more missing symbols like __vtbl). > > Cheers, > Philippe. > > -----Original Message----- > From: owner-roottalk@pcroot.cern.ch > [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Miroslav Helbich > Sent: Tuesday, July 31, 2001 10:37 AM > To: roottalk@pcroot.cern.ch > Subject: [ROOT] adding a class > > > > Hi all, > > I failed badly in adding a new class to root. Well, it worked well with > the very simple examples, but this doesn't. > > I got a junk of code including classes which was not intended to be used > by root. Therefore a person didn't care about adding all the ClassDef and > ClassImp macros, having default constructors or putting just one class per > file. I don't want to touch debuged code, but I want to use it. > > Questions are: > > 1; Well .L myfile.cxx works, but .. Is there a way to add it as a shared > library without adding all ClassDef etc. macros? Adding them makes my > code not to compile in different application. I don't want > any I/O. If I make a shared library without all that it compiles fine, > but Cint doesn't recognize my classes. > > 2; I wrote a small class which uses the mentioned classes. If I add the > ClassDef and ClassImp macros to my new class, generate dictionary etc., > but I left other classes untouched. I don't intend to call them directly > from root. It complains when loading shared library into root. > > root [0] .L pdf.so > dlopen error: /nevis/nevis11/helbich/xF3/mrst/./pdf.so: undefined symbol: > DeclFileLine__4MPdf > Load Error: Failed to load Dynamic link library > /nevis/nevis11/helbich/xF3/mrst/./pdf.so > *** Interpreter error recovered *** > > At the end I want to use libraries, since I want to integrate some > fortran functions into my system and that obviously cannot be done by root > interactive compiler. > > Can anyone give me a clue on how to deal with it? > > Regards > > Miro > > >
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:53 MET