Compiling root with cmake

Hello,
I am trying to compile the root trunk using the cmake build on a SLC5 machine.

However, the build seems to stop whenever it is compiling the cint_static

[ 28%] Building CXX object cint/cint/CMakeFiles/Cint_static.dir/src/bc_inst.o
Linking CXX executable ../../bin/genmap
../../lib/libReflex.so: undefined reference to `G__getstructoffset'
../../lib/libReflex.so: undefined reference to `G__add_setup_func'
../../lib/libReflex.so: undefined reference to `G__check_setup_version'
../../lib/libReflex.so: undefined reference to `G__getnumbaseclass'
../../lib/libReflex.so: undefined reference to `G__inheritance_setup'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::~TGenericClassInfo()'
../../lib/libReflex.so: undefined reference to `G__get_linked_tagnum_fwd'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::SetDeleteArray(void (*)(void*))'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::TGenericClassInfo(char const*, int, char const*, int, ROOT::TInitBehavior const*, void (*)(), int)'
../../lib/libReflex.so: undefined reference to `G__set_tagnum'
../../lib/libReflex.so: undefined reference to `G__tag_memvar_setup'
../../lib/libReflex.so: undefined reference to `G__getgvp'
../../lib/libReflex.so: undefined reference to `G__FastAllocString::Format(char const*, ...)'
../../lib/libReflex.so: undefined reference to `G__FastAllocString::GetBuf(unsigned long&)'
../../lib/libReflex.so: undefined reference to `G__tagtable_setup'
../../lib/libReflex.so: undefined reference to `G__resetifuncposition'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::SetNew(void* (*)(void*))'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::GetClass()'
../../lib/libReflex.so: undefined reference to `G__FastAllocString::~G__FastAllocString()'
../../lib/libReflex.so: undefined reference to `G__getsizep2memfunc'
../../lib/libReflex.so: undefined reference to `ROOT::DefineBehavior(void*, void*)'
../../lib/libReflex.so: undefined reference to `G__int'
../../lib/libReflex.so: undefined reference to `G__memfunc_setup'
../../lib/libReflex.so: undefined reference to `G__get_linked_tagnum'
../../lib/libReflex.so: undefined reference to `G__memvar_setup'
../../lib/libReflex.so: undefined reference to `G__resetglobalenv'
../../lib/libReflex.so: undefined reference to `TVersionCheck::TVersionCheck(int)'
../../lib/libReflex.so: undefined reference to `G__tag_memfunc_setup'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::SetDelete(void (*)(void*))'
../../lib/libReflex.so: undefined reference to `G__setsizep2memfunc'
../../lib/libReflex.so: undefined reference to `G__search_typename2'
../../lib/libReflex.so: undefined reference to `G__getaryconstruct'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::SetDestructor(void (*)(void*))'
../../lib/libReflex.so: undefined reference to `G__call_setup_funcs'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::TGenericClassInfo(char const*, char const*, int, std::type_info const&, ROOT::TInitBehavior const*, void (*)(void*, TMemberInspector&), void (*)(), TVirtualIsAProxy*, int, int)'
../../lib/libReflex.so: undefined reference to `G__setnull'
../../lib/libReflex.so: undefined reference to `TIsAProxy::TIsAProxy(std::type_info const&, void*)'
../../lib/libReflex.so: undefined reference to `G__ULongref'
../../lib/libReflex.so: undefined reference to `G__resetplocal'
../../lib/libReflex.so: undefined reference to `G__remove_setup_func'
../../lib/libReflex.so: undefined reference to `G__tag_memfunc_reset'
../../lib/libReflex.so: undefined reference to `G__tag_memvar_reset'
../../lib/libReflex.so: undefined reference to `G__lastifuncposition'
../../lib/libReflex.so: undefined reference to `G__setnewtype'
../../lib/libReflex.so: undefined reference to `G__store_tempobject'
../../lib/libReflex.so: undefined reference to `ROOT::TGenericClassInfo::SetNewArray(void* (*)(long, void*))'
../../lib/libReflex.so: undefined reference to `G__setgvp'
../../lib/libReflex.so: undefined reference to `G__letint'
../../lib/libReflex.so: undefined reference to `G__defined_typename'
collect2: ld returned 1 exit status
make[2]: *** [bin/genmap] Error 1
make[1]: *** [cint/reflex/CMakeFiles/genmap.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

Currently I am building it using –

cd /opt/root-build
cmake $ROOTSYS
make -j4

Am I doing siomething wrong here?

Subho.

Hi Subho,
You are doing nothing wrong. It should work :slight_smile: The problem is linking the genmap program. For some reason it works on my environment and not on yours. I suspect that you have leftovers from the ‘classic build’ of ROOT in the source directory. In this particular case I am pretty sure that the file G__Reflex.cxx is in $ROOTSYS/cint/reflex/src. Can you please remove all G__xxxx.cxx files from the source tree and try again?

Hello,
After cleaning the G__* files from the source. I now get this error –

[  4%] Building CXX object cint/cint/CMakeFiles/Cint_static.dir/src/loadfile_tmp.o
In file included from /home/sbanerje/root/cint/cint/src/loadfile_tmp.cxx:27:
/home/sbanerje/rb/include/RConfigure.h:26:3: error: invalid preprocessing directive #R__HAS_LZMACOMPRESSION
make[2]: *** [cint/cint/CMakeFiles/Cint_static.dir/src/loadfile_tmp.o] Error 1
make[1]: *** [cint/cint/CMakeFiles/Cint_static.dir/all] Error 2
make: *** [all] Error 2

You need to update your checkout (or get RC2). The new option LZMA was introduced and CMake files had to be adapted.