Problem
Beim Ausführen eines ROOT-Programms siehst du eine Fehlermeldung wie
ERROR in cling::CIFactory::createCI(): cannot extract standard library include paths!
Invoking:
LC_ALL=C x86_64-linux-gnu-g++-7 -xc++ -E -v /dev/null 2>&1 | sed -n -e '/^.include/,${' -e '/^ \/.*++/p' -e '}'
Results was:
With exit code 0Lösung
Im Allgemeinen bedeutet dies, dass du die falsche Version von ROOT für dein Betriebssystem oder deinen Compiler verwendet hast. Die einfachste Lösung ist daher, eine geeignete Version von ROOT für dein Betriebssystem herunterzuladen. Wenn das nicht möglich ist, ist die korrekte Lösung, ROOT aus dem Quellcode zu bauen. Auf diese Weise kannst du sicherstellen, dass ROOT mit dem richtigen Compiler und den richtigen Einstellungen für dein System gebaut wird. Siehe ROOT aus dem Quellcode bauen für weitere Anweisungen.
Falls das auch nicht funktioniert - typischerweise aufgrund eines ungewöhnlichen Compilers oder Betriebssystems - kannst du den Hack ausprobieren, der bei mir funktioniert hat:
Führe zuerst den Befehl mit dem normalen g++-Compiler aus:
g++ -xc++ -E -v /dev/null 2>&1 | sed -n -e '/^.include/,${' -e '/^ \/.*++/p' -e '}'Es sollte mindestens eine Zeile Ausgabe produzieren wie:
/usr/include/c++/7
/usr/include/c++/7/x86_64-suse-linux
/usr/include/c++/7/backwardWenn das funktioniert, kannst du ROOT den Compiler-Namen geben, den es erwartet, indem du einen Symlink von g++ zu x86_64-linux-gnu-g++-7 erstellst. Denke daran, den Namen des Compilers aus der Fehlermeldung zu kopieren, da er auf deinem System oder für deine ROOT-Version abweichen kann.
Du musst diesen Symlink in einem Verzeichnis platzieren, das über PATH zugänglich ist. Wenn du sudo-Zugriff hast, verwende /usr/local/bin, wenn nicht, empfehle ich $HOME/usr/bin (aber du musst dies zu deinem PATH hinzufügen).
ln -s $(which g++) $HOME/usr/bin/x86_64-linux-gnu-g++-7Danach wird ROOT in der Lage sein, den Fake-Compiler zu finden und sollte korrekt funktionieren.