ROOT cannot find -lterminfo during Install


ROOT Version: 6.24/02
Platform: Linux
Compiler: gcc/g++ 4.8.5


I’m trying to install ROOT with Pythia8 enabled, but the cmake --build . -- install -j1 step fails at the following step:

[ 28%] Built target move_headers
Consolidate compiler generated dependencies of target Foundation_Stage1
[ 28%] Built target Foundation_Stage1
Consolidate compiler generated dependencies of target LLVMDemangle
[ 28%] Built target LLVMDemangle
Consolidate compiler generated dependencies of target LLVMSupport
[ 29%] Built target LLVMSupport
Consolidate compiler generated dependencies of target obj.llvm-tblgen
[ 29%] Built target obj.llvm-tblgen
Consolidate compiler generated dependencies of target LLVMTableGen
[ 29%] Built target LLVMTableGen
[ 29%] Linking CXX executable ../../bin/llvm-tblgen
/usr/bin/ld: cannot find -lterminfo
collect2: error: ld returned 1 exit status
gmake[2]: *** [interpreter/llvm/src/bin/llvm-tblgen] Error 1
gmake[1]: *** [interpreter/llvm/src/utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2
gmake: *** [all] Error 2
srun: error: srvcnthpc106: task 0: Exited with exit code 2

My configuration step is as follows:

../../cmake/bin/cmake -DCMAKE_INSTALL_DIR=root_install ../root_src -DPYTHIA8_DIR=/opt/exp_soft/cern/pythia/pythia8306 -DPYTHIA8_INCLUDE=$PYTHIA8/include -DPYTHIA8_LIBRARY=$PYTHIA8/lib/libpythia8.so -Dxrootd=OFF
I disabled xrootd as this was causing errors earlier in the install step.

Any help would be appreciated

You might be missing the ncurses-devel package. Which distribution are you using?

My Linux version is CentOS 7.7.1908. There is a version 5.9 of in my usr file of ncurses (also of ncursesw, not sure if this could cause any issues). I have both usr/bin and usr/include in my path, is there any other directories I should put in the path assuming ncurses was normally installed?

Since the error is in the LLVM part, I wonder if @vvassilev has seen it before?

It seems that the compilation runs under SLURM. Could it be that the compilation runs on a remote machine without the necessary dependencies. You can find a list of necessary dependencies for building ROOT here: Dependencies - ROOT

I had the slurm script check if each of the available modules are there, all the necessary dependencies appear to be available on the main machine and the remote machine

Could you attach the full output of the compilation log? Perhaps this provides a clue to the root cause of the issue.

errorlog.txt (18.1 KB)

Here is the log of the output, hope this helps

That looks all correct to me. @Axel @bellenot Did you see this linker error before?

Well, at least not on Windows… :wink:

One more thing: In your build script, could you run add -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON to your cmake invocation so that we get more debug output from the build script.

errlog.txt (183.9 KB)

This is the output when enabling verbose makefile. Thanks!

Just checked on lxplus (CentOS 7), and here linking llvm-tblgen correctly asks for ltinfo instead of lterminfo. It also uses -std=c++1y instead of -std=c++11 (may or may not be related).

There are a bunch of abc is newer than depends file xyz warnings in the error log. A skewed clock can actually confuse make. I’d suggest to check if all the machines report the same date and time. And also if the files (e.g. ROOT source tarball) don’t have timestamps in the future.

The timestamp issue was because I didn’t properly clean the directory after each failed install, and that eventually caused the files to be out of sync. However, fixing this doesn’t fix the compile error.

I’m not too sure about the compiler version issues, I tried compiling it with C and C++ standards 14 and 17, but it still doesn’t compile. None of the compiler versions I tried supported 1y when it is included in the CMake file, are there any specific versions of gcc/g++ which support this standard?

I think my only remaining suggestion would be to try building ROOT on another (local) CentOS7 machine and to only copy the installation folder to the destination. This may work if the destination machine has similar system libraries installed.

Regarding the C++ standard, CentOS 7’s gcc 8 only support up to C++14 afaik. But that is in principle ok for ROOT 6.24.

I tried installing a slightly older version fo ROOT (6.22.08) and it installs perfectly. Not sure why that is, but this should be fine for now. Thanks for all the help!

Ideally we should not need it. I have created a fix Turn off the terminfo library. We have our own. by vgvassilev · Pull Request #8780 · root-project/root · GitHub