Compilation error related to TUnfoldDensity::GetFoldedOutput()

I work with Root 6.10/09

When compiling I encounter this error related to TUnfoldDensity::GetFoldedOutput():

/cvmfs/cms.cern.ch/slc7_amd64_gcc630/external/gcc/6.3.0/bin/../lib/gcc/x86_64-unknown-linux-gnu/6.3.0/../../../../x86_64-unknown-linux-gnu/bin/ld: /tmp/vveckaln/cczzhXv7.o: undefined reference to symbol '_ZNK14TUnfoldDensity15GetFoldedOutputEPKcS1_S1_S1_bb'
/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/lib/libUnfold.so: error adding symbols: DSO missing from command line

I try

readelf -s /cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/lib/libUnfold.so | grep GetF

and it shows GetFoldedOutput() is associated TUnfold:

   653: 000000000001a890   752 FUNC    GLOBAL DEFAULT   12 _ZNK7TUnfold15GetFoldedOu
   293: 000000000001a890   752 FUNC    GLOBAL DEFAULT   12 _ZNK7TUnfold15GetFoldedOu

Is that fine?

I wander why the compiler looks for libUnfold.so in
/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/lib/
not

root-config --libdir

/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/bin/../../../../../../../slc7_amd64_gcc630/lcg/root/6.10.08-fmblme2/lib

:face_with_monocle:
Previously I worked with Root 6.06/01 and I did not encounter this problem. There TUnfoldDensity is referenced in a completely different library libHist.so:

grep TUnfoldDensity `root-config --libdir`/*.so
Binary file /cvmfs/cms.cern.ch/slc6_amd64_gcc530/cms/cmssw-patch/CMSSW_8_0_26_patch1/external/slc6_amd64_gcc530/bin/../../../../../../../slc6_amd64_gcc530/lcg/root/6.06.00-ikhhed6/lib/libHist.so

Could you please help?


Please read tips for efficient and successful posting and posting code

ROOT Version: Not Provided
Platform: Not Provided
Compiler: Not Provided


Hi,
I think there are some configuration problem. I would try to do a clean build removing any reference to other ROOT versions in your LD_LIBRARY_PATH and PATH

Lorenzo

Hi!
It doesn’t seem so:

echo $LD_LIBRARY_PATH
/afs/cern.ch/work/v/vveckaln/private/CMSSW_9_4_11/biglib/slc7_amd64_gcc630:/afs/cern.ch/work/v/vveckaln/private/CMSSW_9_4_11/lib/slc7_amd64_gcc630:/afs/cern.ch/work/v/vveckaln/private/CMSSW_9_4_11/external/slc7_amd64_gcc630/lib:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/biglib/slc7_amd64_gcc630:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/lib/slc7_amd64_gcc630:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/lib:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/external/llvm/4.0.1/lib64:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/external/gcc/6.3.0/lib64:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/external/gcc/6.3.0/lib
[vveckaln@lxplus729 UnfoldingLIB]$ echo $PATH
/cvmfs/cms.cern.ch/share/overrides/bin:/afs/cern.ch/work/v/vveckaln/private/CMSSW_9_4_11/bin/slc7_amd64_gcc630:/afs/cern.ch/work/v/vveckaln/private/CMSSW_9_4_11/external/slc7_amd64_gcc630/bin:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/bin/slc7_amd64_gcc630:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/bin:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/external/llvm/4.0.1/bin:/cvmfs/cms.cern.ch/slc7_amd64_gcc630/external/gcc/6.3.0/bin:/afs/cern.ch/user/v/vveckaln/AN/AN-17-309/utils:/afs/cern.ch/cms/caf/scripts:/cvmfs/cms.cern.ch/common:/usr/sue/bin:/usr/lib64/qt-3.3/bin:/usr/condabin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/puppetlabs/bin:/afs/cern.ch/user/v/vveckaln/bin
[vveckaln@lxplus729 UnfoldingLIB]$ which root
/cvmfs/cms.cern.ch/slc7_amd64_gcc630/cms/cmssw/CMSSW_9_4_11/external/slc7_amd64_gcc630/bin/root

Viesturs

I managed to fix by adding a separate statement

Lroot-config --libdir -lUnfold -pthread -lm -ldl -rdynamic -Wl,-rpath,`root-config --libdir

in the Makefile.

Why wasn’t root-config --libs --cflags sufficient?

root-config --libs defines only a subset of ROOT libraries, not all of them. For example if using TMVA or roofit you need to add them explicitly.
Please next time make it clear that you were not compiling ROOT but an application based on ROOT.

Best regards

Lorenzo

It was not necessary to indicate separately libUnfold.so in Root 6.06/01.

Yes, in ROOT 6.06 TUnfold was part of libHist, so there was no libUnfold. Apologies for this inconvenience.

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