Compiling our software with v6 seems to work fine, except when trying to generate the .rootmap files.
I saw in the v6 release notes that rlibmap no longer exists, and that rootcling should be used.
Could you please give me an example of use, because apparently the command-line options aren’t
at all the same, and I can’t work out what to do.
Up to ROOT v5.34, we used
rlibmap -f -r libtoto.rootmap -l libtoto.so -d libCore.so libCint.so [etc. …]-c LinkDef.h
to make the rootmap for libtoto.so. What is the equivalent command using rootcling?
If the solution is not trivial, we could always disable the rootmap generation for v6,
it is not totally indispensable (but useful!)
Thanks a lot
the solution is really simple.
just use the -rml and -rmf switches to specify the librariy(ies) and the name of the rootmapfile.
For example, starting from the line you use in the previous post:
rootcling -f dictToto.cxx -rml libtoto.so -rmf libtoto.rootmap myHeader1.h myHeader2.h ... LinkDef.h
For more help: rootcling -v.
Thanks for the reply
Just to be sure I understood:
I have to give the names of all the ‘.h’ files of the classes in my library before (finally) LinkDef.h ?
correct. Note that this is the old command you used for generating the dictionaries. Now it has to be “refurbished” with the information for the rootmap.
-f option updates dictToto.cxx. When I run make next time, dictToto.cxx will be compiled again. If I ignore
rootcling complains that dictToto.cxx exists. How can I resolve this annoyance?
correct. I think that the solution lies in your build configuration. Rootcling is a no brainer: it creates a dictionary and, if told to do so, it overwrites the existing one.
If compilation time is an issue, you could resort to ccache (an external tool, nothing to do with root).
I hope this helps a bit.
I see. I will then simply generate the dict file in
/tmp when generating the rootmap file and forget about it. Thanks, Jing