I compile a ROOT-based C++ library using CMake. Until now, I could copy the library and the binary using it to our cluster and run it there directly (I copied bin and lib folder).
Naively I would think I do not need a dictionary at all (as all my code should be compiled). Unexpectedly, my jobs started failing today when I made some changes.
The error I get is
Error in cling::AutoloadingVisitor::InsertIntoAutoloadingState:
Missing FileEntry for common/LorentzChargeVector.h
requested to autoload type LorentzChargeVector
This type is actually present in the dictionary I generate and the dictionary is present in the same folder as the library. I generate it using root_generate_dictionary CMake macro.
Is there a way to avoid including header files with the binary when putting on the cluster? I suppose something wants to re-generate the dictionary, can I check what?
Hi Axel, thanks for the answer! Will try without the dictionary for now and see how it goes.
I need the dictionary for local prototyping with PyROOT (which I also use to generate the configuration). When I submit the jobs to the cluster, I do not use any interpreter so I expect it is not needed (and indeed it was working until today).
Good! FYI, PyROOT does not need dictionaries; but PyROOT does need headers - because PyROOT uses cling, and cling needs to be told about your classes by including the header.
It seems actually that I have an obscure crash in my code that also provoked cling to start doing strange things. Anyway I will cleanup our code to try to be as light as possible on dictionary generation.