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 https://sft.its.cern.ch/jira/browse/ROOT-9759

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.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.