Building QualityControl fails at Monitoring on centos 7

Dear experts,

I am trying to update QualityControl on centos 7 with the latest software stack.
The command aliBuild build QualityControl --defaults o2 fails at Monitoring@v3.8.1 with some undefined references to AliceO2::InfoLogger.

lib/libO2Monitoring.so: undefined reference to `AliceO2::InfoLogger::InfoLogger::operator<<(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
lib/libO2Monitoring.so: undefined reference to `AliceO2::InfoLogger::InfoLoggerContext::setField(AliceO2::InfoLogger::InfoLoggerContext::FieldName, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status

The full log can be found here.

I switched off pythia8 in the recipes root.sh and o2.sh but I don’t think that has to do with that.

Does anyone have an idea what is going wrong?

Thanks a lot for any help!

Cheers,
Thomas

Dear Thomas,
That should work. Is your alidist at master ? what are your development packages ?
One way to often sort it out is to blast sw
Cheers,
Barth

Hi Barth,

yes, alidist is at master. My development packages are O2 , QualityControl, and DataDistribution. I’ll try removing sw and let you know.

Cheers,
Thomas

Apart from the nuclear option, this seems to be some sort of hidden dependency of Monitoring on InfoLogger which does not trigger the appropriate rebuilds everywhere, hence the missing symbol when the InfoLogger API changes. @awegrzyn could it be there is an AliceO2::InfoLogger (or similar) missing in one of the Monitoring CMakeLists.txt?

Hi,

I just found that the nuclear option unfortunately didn’t fix the problem anyway.

Cheers,
Thomas

Hi,
Yes, Monitoring may use InfoLogger for logging, but this is optional dependency and not set in alidist ATM, therefore this should not happen. I can take a look.

Just FYI: The same software stack compiles just fine on ubuntu 18.04.

On my CC7 with system’s GCC I managed to build QC without any issues. What I did is aliBuild build QualityControl --defaults o2-dataflow --always-prefer-system.

As I’m not able to reproduce could you try:

  • To find out how Monitoring’s CMake picked up InfoLogger CMakeConfig even though according to alidist InfoLogger is not Monitoring’s dep
  • Check whether RPATHs are OK in the library: readelf -a lib/libO2Monitoring.so | grep RPATH
  • Check in your compilation log whether libInfoLogger was compiled before Monitoring

Hi @awegrzyn,

I will try to compile with the command you posted.

  • There is no libO2Monitoring.so, since it did not compile properly. Or am I missing something?
  • libInfoLogger@v2.0.0 is compiled directly before Monitoring

Cheers,
Thomas

Hi,
The library compiles fine, the issue is with linking tests against library, could you check in INSTALLROOT dir? Looking at your logs it should be: /home/tklemenz/AliSoftware/sw/INSTALLROOT/b046259406ea27d74b24b86e538b0dc9081b23a4/slc7_x86-64/Monitoring/v3.8.1-local1

There is nothing but compile_commands.json in that folder and it is the only folder in b046259406ea27d74b24b86e538b0dc9081b23a4.

Also aliBuild build QualityControl --defaults o2-dataflow --always-prefer-system is failing with the same error. To be precise I also specify the work dir as sw while starting compilation from the folder containing alidist and the development packages. So this shouldn’t make a difference either.

However, I found libO2Monitoring.so!

readelf -a lib/libO2Monitoring.so | grep RPATH

gives

0x000000000000000f (RPATH)              Library rpath: [/home/tklemenz/AliSoftware/sw/slc7_x86-64/boost/v1.75.0-local2/lib:/home/tklemenz/AliSoftware/sw/slc7_x86-64/curl/7.70.0-local2/lib:/usr/local/lib:::::::::::::::]

No idea if this is good or not but there is no InfoLogger.

I hope this helps.

Cheers,
Thomas