Compilation problem with different root configuration

Hello rooters,

I have been asking on how to make root work on grid. I was able to compile and use it using:

unset ROOTSYS
./configure --prefix=$installPATH --etcdir=$installPATH/etc/root --enable-explicitlink --enable-rpath --enable-soversion --disable-x11 --all
make
make install

And then taring that $installPATH, and untaring it in every job (using root.exe as the executable).

The problem is when I try to compile one macro with “root-exe macroName.C+” it shows undefined references which never appeared with the same macro, and the same root version, but different machine (with x11 library for example, and probably without the “–enable-explicitlink --enable-rpath --enable-soversion”.

The output when trying to compile is (deleting some rubbish):

macroName_C_ACLiC_dict.cxx:(.text+0x5ac): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x5bf): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x72e): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x749): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x757): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x75f): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x77a): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x788): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x790): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x7ab): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x7b9): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x7c1): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x7dc): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x7ea): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x7f2): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x80d): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x81b): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x82a): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x845): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x853): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x85b): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x876): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x884): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x88c): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x8a7): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x8b5): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x8bd): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x8d8): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x8e6): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x8f2): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x90d): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x91b): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x927): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x942): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x950): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x95c): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x977): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x985): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x991): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0x9ac): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x9ba): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0x9c6): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0x9e1): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0x9ef): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0x9fb): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0xa16): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0xa24): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0xa30): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0xa4b): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0xa59): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0xa65): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0xa80): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0xa8e): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0xa9a): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0xab5): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0xac3): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0xacf): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0xaea): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0xaf8): undefined reference to G__setnewtype' macroName_C_ACLiC_dict.cxx:(.text+0xb04): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0xb1f): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0xec2): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0xeca): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0xedc): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0xef4): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0xf02): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0xf0a): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0xf15): undefined reference toG__get_linked_tagnum’
macroName_C_ACLiC_dict.cxx:(.text+0xf2d): undefined reference to G__search_typename2' macroName_C_ACLiC_dict.cxx:(.text+0xf3b): undefined reference toG__setnewtype’
macroName_C_ACLiC_dict.cxx:(.text+0xf43): undefined reference to G__get_linked_tagnum' macroName_C_ACLiC_dict.cxx:(.text+0xf5e): undefined reference toG__search_typename2’
macroName_C_ACLiC_dict.cxx:(.text+0x294a): undefined reference to G__setnull' macroName_C_ACLiC_dict.cxx:(.text+0x29b2): undefined reference toG__int’
macroName_C_ACLiC_dict.cxx:(.text+0x5416): undefined reference to G__int' macroName_C_ACLiC_dict.cxx:(.text+0x546d): undefined reference toG__int’
macroName_C_ACLiC_dict.cxx:(.text+0x549d): undefined reference to G__letint' macroName_C_ACLiC_dict.cxx:(.text+0x552b): undefined reference toG__int’
macroName_C_ACLiC_dict.cxx:(.text+0x5584): undefined reference to G__int' macroName_C_ACLiC_dict.cxx:(.text+0x55db): undefined reference toG__int’
macroName_C_ACLiC_dict.cxx:(.text+0x560c): undefined reference to G__letint' macroName_C_ACLiC_dict.cxx:(.text+0x567f): undefined reference toG__int’
macroName_C_ACLiC_dict.cxx:(.text+0x56af): undefined reference to G__letint' macroName_C_ACLiC_dict.cxx:(.text+0x5709): undefined reference toG__letint’
collect2: ld returned 1 exit status
Error in : Compilation failed!

I read somewhere that --enable-soversion gives some trouble with ACLiC. Do you know if this may be the cause? Is there a better way to compile root in a remote machine (without libX11)?

Thank you for your help!

I would mistrust the “–enable-rpath” flag. If you use it, you must be sure that on every system, where you unpack your binary distribution, all absolute paths to all shared libraries are exactly the same as on the system which was used to build ROOT.

Another thing to remember is … in any case, make sure that the c++ compiler and glibc on all machines are the same (i.e. their versions).

Looking at [url=https://root-forum.cern.ch/t/aclic-problem-root-v5-32-01-on-centos-6-2-x86-64-smp/13911/1 old topic[/url], there did exist problems with ACLiC when “–enable-soversion” had been used. But this should had been fixed a year ago or so.
If you meet this problem, right before you try to precompile your macro with ACLiC, try to execute gSystem->Load(“libCint”); using, for example:
echo ‘gSystem->Load(“libCint”); gROOT->Macro(“macroName.C++”); gSystem->Exit(0);’ | root.exe -b -l

In the end what made the trick was:

export ROOTSYS=$installPATH
./configure --enable-explicitlink --enable-soversion --disable-x11
make
make install

Thanks to Wile E. for your help!

I hope you remembered that the “source code” subdirectory, in which you run “./configure” and “make”, must NOT be the same as your target “installPATH”.