title: Errors while Installing Garfield++
body: <p>Apologies beforehand, I figure this is the kind of thing that probably has been posted about before but I couldn't find anything when I searched.</p>
  <p>I'm trying to install Garfield++ and getting some error messages when I try to run the cmake. My system is running Ubuntu 18.04.5 LTS and ROOT version 6.20/02.</p>
  <p>Everything seems to go fine until I try <code>make -j N</code></p>
  <p>When that happens I get these errors.</p>
  <pre><code>[  0%] Generating GarfieldDict.cxx, libGarfieldDict_rdict.pcm, libGarfieldDict.rootmap
  In file included from input_line_6:3:
  In file included from /home/jason/Root/build/include/TObject.h:18:
  /home/jason/Root/build/include/TStorage.h:93:4: error: use of undeclared identifier 'R__likely'
     ClassDef(TStorage,0)  //Storage manager class
     ^
  /home/jason/Root/build/include/Rtypes.h:327:4: note: expanded from macro 'ClassDef'
     _ClassDefOutline_(name,id,virtual,)   \
     ^
  /home/jason/Root/build/include/Rtypes.h:301:4: note: expanded from macro '_ClassDefOutline_'
     _ClassDefBase_(name,id, virtual_keyword, overrd)       \
     ^
  /home/jason/Root/build/include/Rtypes.h:276:11: note: expanded from macro '_ClassDefBase_'
        if (R__likely(recurseBlocker &gt;= 2)) ...
            ^
  In file included from input_line_6:3:
  In file included from /home/jason/Root/build/include/TObject.h:18:
  /home/jason/Root/build/include/TStorage.h:93:13: error: 'TStorage' does not refer to a value
     ClassDef(TStorage,0)  //Storage manager class
              ^
  /home/jason/Root/build/include/TStorage.h:33:7: note: declared here
  class TStorage {
        ^
  /home/jason/Root/build/include/TStorage.h:118:1: error: use of undeclared identifier 'R__INTENTIONALLY_UNINIT_BEGIN'
  R__INTENTIONALLY_UNINIT_BEGIN
  ^
  /home/jason/Root/build/include/TStorage.h:120:1: error: use of undeclared identifier 'R__INTENTIONALLY_UNINIT_END'
  R__INTENTIONALLY_UNINIT_END
  ^
  /home/jason/Root/build/include/TStorage.h:131:1: error: unknown type name 'R__NEVER_INLINE'
  R__NEVER_INLINE void TStorage::UpdateIsOnHeap(volatile const UInt_t &amp;uni...
  ^
  /home/jason/Root/build/include/TStorage.h:131:17: error: expected unqualified-id
  R__NEVER_INLINE void TStorage::UpdateIsOnHeap(volatile const UInt_t &amp;uni...
                  ^
  In file included from input_line_6:3:
  /home/jason/Root/build/include/TObject.h:133:4: error: unknown type name 'R__ALWAYS_INLINE'
     R__ALWAYS_INLINE Bool_t IsOnHeap() const { return TestBit(kIsOnHeap); }
     ^
  /home/jason/Root/build/include/TObject.h:133:27: error: expected ';' at end of declaration list
     R__ALWAYS_INLINE Bool_t IsOnHeap() const { return TestBit(kIsOnHeap); }
                            ^
                            ;
  /home/jason/Root/build/include/TObject.h:169:30: error: unknown type name 'Bool_t'
     void     SetBit(UInt_t f, Bool_t set);
                               ^
  /home/jason/Root/build/include/TObject.h:172:4: error: unknown type name 'R__ALWAYS_INLINE'
     R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const { return (Bool_t) ((f...
     ^
  /home/jason/Root/build/include/TObject.h:172:21: error: duplicate member 'Bool_t'
     R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const { return (Bool_t) ((f...
                      ^
  /home/jason/Root/build/include/TObject.h:133:21: note: previous declaration is here
     R__ALWAYS_INLINE Bool_t IsOnHeap() const { return TestBit(kIsOnHeap); }
                      ^
  /home/jason/Root/build/include/TObject.h:172:27: error: expected ';' at end of declaration list
     R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const { return (Bool_t) ((f...
                            ^
                            ;
  /home/jason/Root/build/include/TObject.h:210:11: error: unknown type name 'Bool_t'
     static Bool_t    GetObjectStat();
            ^
  /home/jason/Root/build/include/TObject.h:211:35: error: unknown type name 'Bool_t'
     static void      SetObjectStat(Bool_t stat);
                                    ^
  /home/jason/Root/build/include/TObject.h:215:4: error: unknown type name 'Bool_t'
     ClassDef(TObject,1)  //Basic ROOT object
     ^
  /home/jason/Root/build/include/Rtypes.h:327:4: note: expanded from macro 'ClassDef'
     _ClassDefOutline_(name,id,virtual,)   \
     ^
  /home/jason/Root/build/include/Rtypes.h:301:4: note: expanded from macro '_ClassDefOutline_'
     _ClassDefBase_(name,id, virtual_keyword, overrd)       \
     ^
  /home/jason/Root/build/include/Rtypes.h:273:20: note: expanded from macro '_ClassDefBase_'
     virtual_keyword Bool_t CheckTObjectHashConsistency() const overr...
                     ^
  In file included from input_line_6:3:
  /home/jason/Root/build/include/TObject.h:215:4: error: use of undeclared identifier 'R__likely'
  /home/jason/Root/build/include/Rtypes.h:327:4: note: expanded from macro 'ClassDef'
     _ClassDefOutline_(name,id,virtual,)   \
     ^
  /home/jason/Root/build/include/Rtypes.h:301:4: note: expanded from macro '_ClassDefOutline_'
     _ClassDefBase_(name,id, virtual_keyword, overrd)       \
     ^
  /home/jason/Root/build/include/Rtypes.h:276:11: note: expanded from macro '_ClassDefBase_'
        if (R__likely(recurseBlocker &gt;= 2)) ...
            ^
  In file included from input_line_6:3:
  /home/jason/Root/build/include/TObject.h:215:13: error: 'TObject' does not refer to a value
     ClassDef(TObject,1)  //Basic ROOT object
              ^
  /home/jason/Root/build/include/TObject.h:37:7: note: declared here
  class TObject {
        ^
  /home/jason/Root/build/include/TObject.h:237:8: error: use of undeclared identifier 'R__unlikely'
     if (R__unlikely(fgObjectStat)) TObject::AddToTObjectTable(this);
         ^
  /home/jason/Root/build/include/TObject.h:261:8: error: use of undeclared identifier 'R__unlikely'
     if (R__unlikely(fgObjectStat)) TObject::AddToTObjectTable(this);
         ^
  fatal error: too many errors emitted, stopping now [-ferror-limit=]
  Error: Error loading the default header files.
  CMakeFiles/Garfield.dir/build.make:208: recipe for target 'GarfieldDict.cxx' failed
  make[2]: *** [GarfieldDict.cxx] Error 1
  CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/Garfield.dir/all' failed
  make[1]: *** [CMakeFiles/Garfield.dir/all] Error 2
  Makefile:129: recipe for target 'all' failed
  make: *** [all] Error 2
  </code></pre>
  <p>To be frank, I have only a vague idea what this means. I <em>think</em> it means that the Garfield++ cmake can find my ROOT but for some reason can't read it properly, which I don't know how to fix.</p>
  <p>Any help would be appreciated.</p>
  <p>I followed the instructions at <a href="https://garfieldpp.web.cern.ch/garfieldpp/getting-started/" rel="nofollow noreferrer">https://garfieldpp.web.cern.ch/garfieldpp/getting-started/</a></p>
  <ul>
  <li><p>Phase 1 --
  The only deviation from the link was having to tell ccmake where my root directory was. 1st Phase - Checked Prerequisites: A C++ compiler that could support C++11, Root (at least version 6), GSL (GNU Scientific Library), and CMake (at least version 3.3). Only lacked GSL so I went to <a href="http://mirrors.ibiblio.org/gnu/ftp/gnu/gsl" rel="nofollow noreferrer">http://mirrors.ibiblio.org/gnu/ftp/gnu/gsl</a> and, downloaded and installed version 2.6.</p>
  </li>
  <li><p>Phase 2</p>
  <pre><code>mkdir GARFIELD
  export GARFIELD_HOME=/home/GARFIELD
  git clone http://gitlab.cern.ch/garfield/garfieldpp.git $GARFIELD_HOME
  cd $GARFIELD_HOME
  mkdir build
  cd build
  cmake $GARFIELD_HOME
  make -j 4
  </code></pre>
  </li>
  </ul>
  <p>The last step which has the failure. [Though I have noticed that the second to last step, while it runs, does leave a field blank. So here's the results of <code>cmake $GARFIELD_HOME</code>.</p>
  <pre><code>-- -----------------------------------------------------------
  -- Garfield source files: Source/AvalancheMC.cc;Source/AvalancheMicroscopic.cc;Source/Component.cc;Source/ComponentAnalyticField.cc;Source/ComponentAnsys121.cc;Source/ComponentAnsys123.cc;Source/ComponentCST.cc;Source/ComponentComsol.cc;Source/ComponentConstant.cc;Source/ComponentElmer.cc;Source/ComponentElmer2D.cc;Source/ComponentFieldMap.cc;Source/ComponentGrid.cc;Source/ComponentNeBem2d.cc;Source/ComponentNeBem3d.cc;Source/ComponentNeBem3dMap.cc;Source/ComponentTcad2d.cc;Source/ComponentTcad3d.cc;Source/ComponentUser.cc;Source/ComponentVoxel.cc;Source/DriftLineRKF.cc;Source/GeometryRoot.cc;Source/GeometrySimple.cc;Source/KDTree.cc;Source/Medium.cc;Source/MediumCdTe.cc;Source/MediumGaAs.cc;Source/MediumGas.cc;Source/MediumMagboltz.cc;Source/MediumSilicon.cc;Source/Numerics.cc;Source/OpticalData.cc;Source/PlottingEngineRoot.cc;Source/Polygon.cc;Source/Random.cc;Source/RandomEngineRoot.cc;Source/Sensor.cc;Source/Shaper.cc;Source/Solid.cc;Source/SolidBox.cc;Source/SolidExtrusion.cc;Source/SolidHole.cc;Source/SolidRidge.cc;Source/SolidSphere.cc;Source/SolidTube.cc;Source/SolidWire.cc;Source/TetrahedralTree.cc;Source/Track.cc;Source/TrackBichsel.cc;Source/TrackElectron.cc;Source/TrackHeed.cc;Source/TrackPAI.cc;Source/TrackSimple.cc;Source/TrackSrim.cc;Source/ViewBase.cc;Source/ViewCell.cc;Source/ViewDrift.cc;Source/ViewFEMesh.cc;Source/ViewField.cc;Source/ViewGeometry.cc;Source/ViewIsochrons.cc;Source/ViewMedium.cc;Source/ViewSignal.cc;GarfieldDict.cxx
  -- -----------------------------------------------------------
  -- Heed source files: Heed/HeedFieldMap.cpp;Heed/heed++/code/BGMesh.cpp;Heed/heed++/code/ElElasticScat.cpp;Heed/heed++/code/EnTransfCS.cpp;Heed/heed++/code/EnTransfCS_BGM.cpp;Heed/heed++/code/EnergyMesh.cpp;Heed/heed++/code/HeedCluster.cpp;Heed/heed++/code/HeedCondElectron.cpp;Heed/heed++/code/HeedDeltaElectron.cpp;Heed/heed++/code/HeedDeltaElectronCS.cpp;Heed/heed++/code/HeedMatterDef.cpp;Heed/heed++/code/HeedParticle.cpp;Heed/heed++/code/HeedParticle_BGM.cpp;Heed/heed++/code/HeedPhoton.cpp;Heed/heed++/code/PairProd.cpp;Heed/heed++/code/PhotoAbsCS.cpp;Heed/heed++/code/PhotoAbsCSLib.cpp;;Heed/wcpplib/geometry/box.cpp;Heed/wcpplib/geometry/circumf.cpp;Heed/wcpplib/geometry/gparticle.cpp;Heed/wcpplib/geometry/mparticle.cpp;Heed/wcpplib/geometry/plane.cpp;Heed/wcpplib/geometry/polyline.cpp;Heed/wcpplib/geometry/straight.cpp;Heed/wcpplib/geometry/surface.cpp;Heed/wcpplib/geometry/trajestep.cpp;Heed/wcpplib/geometry/vec.cpp;Heed/wcpplib/geometry/volume.cpp;Heed/wcpplib/ioniz/bethe_bloch.cpp;Heed/wcpplib/ioniz/e_cont_enloss.cpp;Heed/wcpplib/math/DoubleAc.cpp;Heed/wcpplib/math/PolLeg.cpp;Heed/wcpplib/math/cubic.cpp;Heed/wcpplib/math/kinem.cpp;Heed/wcpplib/math/linexi2.cpp;Heed/wcpplib/math/lorgamma.cpp;Heed/wcpplib/math/parabola.cpp;Heed/wcpplib/matrix/inverse.cpp;Heed/wcpplib/matrix/multiply.cpp;Heed/wcpplib/matter/AtomDef.cpp;Heed/wcpplib/matter/GasDef.cpp;Heed/wcpplib/matter/GasLib.cpp;Heed/wcpplib/matter/MatterDef.cpp;Heed/wcpplib/matter/MoleculeDef.cpp;Heed/wcpplib/particle/eparticle.cpp;Heed/wcpplib/particle/particle_def.cpp;Heed/wcpplib/random/PointsRan.cpp;Heed/wcpplib/random/chisran.cpp;Heed/wcpplib/random/pois.cpp;Heed/wcpplib/random/rnorm.cpp;Heed/wcpplib/safetl/AbsArr.cpp;Heed/wcpplib/safetl/AbsPtr.cpp;Heed/wcpplib/stream/definp.cpp;Heed/wcpplib/stream/findmark.cpp;Heed/wcpplib/stream/prstream.cpp;Heed/wcpplib/util/FunNameStack.cpp
  -- -----------------------------------------------------------
  -- Magboltz source files: Source/magboltz-11.9.f
  -- -----------------------------------------------------------
  -- neBEM source files: NeBem/ComputeProperties.c;NeBem/GarfieldppInterface.cpp;NeBem/Isles.c;NeBem/ReTriM.c;NeBem/Vector.c;NeBem/luc.c;NeBem/neBEM.c;NeBem/neBEMInterface.c;NeBem/nrutil.c;NeBem/svdcmp.c
  -- -----------------------------------------------------------
  -- Directory used to find ROOT dict files: 
  -- -----------------------------------------------------------
  -- Garfield++ examples will be built. In order disable this option use -DWITH_EXAMPLES=OFF
  -- Install path: /usr/local
  -- If you want to change this path call cmake -DCMAKE_INSTALL_PREFIX=my_install_path ...
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /home/jason/GARFIELD/build
  </code></pre>
  <p>Notice the Root directory line is blank. How do I fix that?</p>
  <p>Edit:2-</p>
  <p>Measured success. Switched the location where ROOT is read from to where it was installed instead of where it was built and I got a new error message.</p>
  <pre><code>[  0%] Generating GarfieldDict.cxx, libGarfieldDict_rdict.pcm, libGarfieldDict.rootmap
  No such file or directory
  CMakeFiles/Garfield.dir/build.make:208: recipe for target 'GarfieldDict.cxx' failed
  make[2]: *** [GarfieldDict.cxx] Error 1
  CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/Garfield.dir/all' failed
  make[1]: *** [CMakeFiles/Garfield.dir/all] Error 2
  Makefile:129: recipe for target 'all' failed
  make: *** [all] Error 2
  </code></pre>
  <p>Still emotionally processing the full implications.</p>