Does Root really need the developer tools at runtime on macOS?

I am trying to build G4beamline with Root 6.22/08 on macOS Catalina. The only Root classes that are called directly are:

TNTuple, TFile, TDirectory
The program starts executing on a bare install of macOS Catalina, so I have included all the required shared libraries in the app bundle. But it crashes with a dialog box prompting to install the developer tools. Note that TNtuples are created, filled, and read or written to a TFile; they are never displayed. Qt and OpenGL graphics are used, but no Root graphics is ever called.

The trace shows that creating a TNtuple calls TROOT::Interpreter(), which loads libCling.so, whose CreateInterpreter() eventually fails with that prompt dialog box. Note that libCore.so does NOT list libCling.so as a required library, implying it was loaded dynamically.

If this very limited use of Root really needs the developer tools, I will be forced to omit Root, as I cannot expect my users to do that. Unless someone can show me how to avoid it for this very limited use.

FYI here is the list of Root libraries installed:
libCling.so libCore.so libGpad.so libGraf.so libGraf3d.so libHist.so
libImt.so libMathCore.so libMatrix.so libMultiProc.so libNet.so libPhysics.so
libPostscript.so libRIO.so libROOTDataFrame.so libROOTNTuple.so
libROOTVecOps.so libRint.so libThread.so libTree.so libTreePlayer.so

In addition, Geant4 and CLHEP are statically linked, and many Qt libraries are installed, as well as a bunch of stuff from /usr/local:
libcrypto.1.1.dylib libfftw3f.3.dylib libgcc_s.1.dylib libgsl.25.dylib
libgslcblas.0.dylib liblz4.1.dylib liblzma.5.dylib libpcre.1.dylib
libsqlite3.0.dylib libssl.1.1.dylib libstdc++.6.dylib libtbb.12.dylib
libzstd.1.dylib

ROOT Version: ROOT 6.22/08 (6.22.08_2)
Platform: macOS Catalina (10.15.7)
Compiler: Apple clang version 12.0.0 (clang-1200.0.32.29)


ROOT I/O (currently) needs C++ runtime type information, that’s provided by cling, which in turn needs to be able to #include C++ standard library headers, which needs the developer tools (or Xcode). @vvassilev I thought we are able to substitute that need by C++ runtime modules?

That’s what I suspected. I cannot expect my users to install the developer tools.

I have decided to revert to Root 5.34.36. It has everything my program needs, without that dependency.

Take the head of the v5-34-00-patches branch (you may need to add “--enable-gsl-shared --disable-fitsio” when configuring it).

That was also my take. I don’t think we have ever tried it actually. I believe we still need a system compiler present. Isn’t that only available with the command-line tools?

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