Had the work of my morning destroyed by symbol lookup error:

Dear all,

this is not so much a question about how to do things but why things are done in a specific way… I have this little code that fits angular distribution and it uses wigner 3j and 6j symbols. Having spent the morning preparing the data I load my fitting code with .L …+. No errors. I then prepare the fit with some commands specific to the code. No problems. Then I tell it to fit, and BANG, my code calls the wigner functions… Root exits with

root.exe: symbol lookup error:TGammaDistribution_cxx.so: undefined symbol: _ZN4ROOT4Math9wigner_3jEiiiiii

destroying this mornings work. I know why, I know how to fix this using gSystem->Load etc but this time I forgot and hence lost the work of this morning. I also know I should have saved the histograms before fitting and all of the good advice we have to give our younger colleagues because root has a habit of crashing one way or the other during a day of work.

But why do I have to have this problem? Why is MathMore excluded from ROOT auto load facilities? Of course I can put this into a .rootlogon.C etc but then I work on another computer and I will forget again etc…

So, to sum it up, why do I have to worry about loading MathMore?
Maybe root could handle a symbol lookup error with more grace?

best regards

Joa


_ROOT Version:6.12/04
_Platform:Linux 4.17.9-200.fc28.x86_64
_Compiler:g++ (GCC) 8.1.1 20180712 (Red Hat 8.1.1-5)


Dear Joa,

This is a disaster! ROOT should not exit, ever, upon seeing an exception!

I can reproduce this; see Loading...

I have marked this as “critical” - we won’t delay 6.16 for this, but it’s the next thing once all the blocking issues are fixed.

Thanks a lot for reporting, and apologies for destroying your morning’s work…

Now regarding your second question:

Because we cannot auto-load functions - but we’re working on getting that supported (keyword “C++ runtime modules”, we’ll have a preview for the v6.16 release). But if you load libMathMore before creating TGammaDistribution_cxx.so through .L TGammaDistribution.cxx+ then the resulting TGammaDistribution_cxx.so will know that it depends on libMathMore, and will automatically load it whenever it is loaded: ACLiC (“the .C+ thing”) assumes that the library it builds depends on all the libraries that have been loaded so far.

Cheers, Axel.