When does Cling require headers to be present with a compiled library?

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?

Thanks in advance!

Hi Tadej,

We currently need to find the header to load the relevant library when that header is included in the interpreter.

Then don’t generate one :slight_smile: Dictionaries are needed for doing I/O on your types - if you don’t need that, don’t generate the dictionary.

Cheers, Axel.

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.

Cheers, Axel.

This makes things much clearer! Thanks!

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.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.