Hello guys,
I created my own library using root.
It contains a class that I will call MyClass.
This class contains a private pointer to TH1D. When I compile MyClass there is no problem.
Furthermore I can use it in my compiled root program without any trouble.
When I compile MyClass in a library .so and load it in a interactive root session I got this message error:
dlopen error: /afs/cern.ch/user/m/meyerma/workspace/ROOTWorkspace//lib/…/lib/libROOTWorkspace.so: undefined symbol: _ZTI4TH1D
Load Error: Failed to load Dynamic link library /afs/cern.ch/user/m/meyerma/workspace/ROOTWorkspace//lib/…/lib/libROOTWorkspace.so
When I remove the pointer to TH1D in MyClass about which I spoke the error disappears.
I suppose it is a LinkDef.h error, but I don’t know if I have to write something more about TH1D* in my LinkDef.h file :
#ifdef CINT
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class MyClass;
#endif
Hope this is clear, and that you will be able to help me!
Best Regards,
Marco
The “_ZTI4TH1D” is the “typeinfo for TH1D” -> I hope you:
#include "TH1.h"
in the “MyClass.h” interface file.
I’m not sure if it helps but try:
#pragma link C++ class MyClass+;
Hello Wile,
Thanks a lot, the new pragma cmd is really better!
It’s work now !
Best,
Marco
Hello ! I’m coming back, because I get right now this kind of error.
/afs/cern.ch/sw/lcg/app/releases/ROOT/5.34.17/x86_64-slc6-gcc47-opt/root/bin/root.exe: symbol lookup error: /afs/cern.ch/user/m/meyerma/workspace/ROOTWorkspace//lib/./libROOTWorkspace.so: undefined symbol: _ZN4TH1DC1EPKcS1_idd
It looks like a similar error… 
When you link your “libROOTWorkspace.so”, do you add the output of:“root-config --libs”?
I didn’t do it, thanks a lot! Sorry i’m not totally aware with all those necessary commands.
Do you have some documents to learn about linkage and rootcint ?
Marco
What’s the linker command line that you use now to build your “libROOTWorkspace.so”?
For ROOT 5, try to have a look at:
- grep -r rootcint ${ROOTSYS}/test
- ROOT User’s Guide -> Adding a Class
- ROOT User’s Guide -> CINT the C++ Interpreter
- root [0] .?