Wie man ROOT ERROR in cling::CIFactory::createCI(): cannot extract standard library include paths! behebt

Problem

Beim Ausführen eines ROOT-Programms sehen Sie eine Fehlermeldung wie

cling_cifactory_error.txt
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 0

Lösung

Im Allgemeinen bedeutet dies, dass Sie die falsche Version von ROOT für Ihr Betriebssystem oder Ihren Compiler verwendet haben. Die einfachste Lösung ist daher, eine geeignete Version von ROOT für Ihr Betriebssystem herunterzuladen. Wenn das nicht möglich ist, ist die korrekte Lösung, ROOT aus dem Quellcode zu bauen. Auf diese Weise können Sie sicherstellen, dass ROOT mit dem richtigen Compiler und den richtigen Einstellungen für Ihr 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 - können Sie den Hack ausprobieren, der bei mir funktioniert hat:

Führen Sie zuerst den Befehl mit dem normalen g++-Compiler aus:

check_gpp_includes.sh
g++ -xc++ -E -v /dev/null 2>&1 | sed -n -e '/^.include/,${' -e '/^ \/.*++/p' -e '}'

Es sollte mindestens eine Zeile Ausgabe produzieren wie:

gpp_include_output.txt
 /usr/include/c++/7
 /usr/include/c++/7/x86_64-suse-linux
 /usr/include/c++/7/backward

Wenn das funktioniert, können Sie ROOT den Compiler-Namen geben, den es erwartet, indem Sie einen Symlink von g++ zu x86_64-linux-gnu-g++-7 erstellen. Denken Sie daran, den Namen des Compilers aus der Fehlermeldung zu kopieren, da er auf Ihrem System oder für Ihre ROOT-Version abweichen kann.

Sie müssen diesen Symlink in einem Verzeichnis platzieren, das über PATH zugänglich ist. Wenn Sie sudo-Zugriff haben, verwenden Sie /usr/local/bin, wenn nicht, empfehle ich $HOME/usr/bin (aber Sie müssen dies zu Ihrem PATH hinzufügen).

create_gpp_symlink.sh
ln -s $(which g++) $HOME/usr/bin/x86_64-linux-gnu-g++-7

Danach wird ROOT in der Lage sein, den Fake-Compiler zu finden und sollte korrekt funktionieren.


Check out similar posts by category: ROOT