MakeProxy, problems with shared lib

Hello ROOTers,

I’m having some trouble with on of my shared class libraries. It contains (among others) a class created with MakeProxy. Compiling and linking works without problems. However, when I try to load this library in the Root command line it fails with a dlopen error:

 undefined symbol: _ZTIN4ROOT12TBranchProxyE

A look into the library with nm gives me

...
0008a430 V _ZTI9TestClass
00089e88 V _ZTIA153_c
0008a43c V _ZTIN4Cint12G__ClassInfoE
         U _ZTIN4ROOT12TBranchProxyE
0008a424 V _ZTIN4ROOT9TImpProxyIcEE
0008a40c V _ZTIN4ROOT9TImpProxyIdEE
0008a418 V _ZTIN4ROOT9TImpProxyIiEE
0008a400 V _ZTIN4ROOT9TImpProxyIjEE
00089ec0 V _ZTISt12_Vector_baseIdSaIdEE
00089ec8 V _ZTISt12_Vector_baseIiSaIiEE
...

I’m using root_v5.18.00 and gcc version 3.4.4. Compiling and linking is done with my own Makefile (no problems so far) which calls rootcint for every header file. I don’t use a LinkDef.h file. For the class in question the ClassDef counter is set to 0.

I’ve also compiled and linked with ACLIC. In this case everything works! I can use the MakeProxie’d class without problems.

Might it be a problem with the LinkDef.h file? So far I never needed to have one. But now the trees I’m looking at contain STL vectors.

Thanks for your ideas.
Oliver

PS. I’ve noticed that the compilation of the class generated by MakeProxy takes a lot of time. Why is that?

Hi,

It is actually a link problem.

You need to link (at least) with -lTreePlayer and -lCint

[quote]PS. I’ve noticed that the compilation of the class generated by MakeProxy takes a lot of time. Why is that?[/quote]Depending on your ROOT file, the generate classes might have a lot of data members (i.e. be large).

Cheers,
Philippe

Exactly!
That was the problem. Must have overlooked it in the ldd output. :blush:

May I suggest to add libTreePlayer to the root-config tool?

Many thanks,
Oliver