Comment corriger l'erreur ROOT in cling::CIFactory::createCI(): cannot extract standard library include paths!

Problème

Lors de l’exécution d’un programme ROOT, vous voyez un message d’erreur tel que

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

Solution

En général, cela signifie que vous avez utilisé la mauvaise version de ROOT pour votre système d’exploitation ou votre compilateur. La solution la plus simple est donc de télécharger une version appropriée de ROOT pour votre système d’exploitationx86_64-linux-gnu-g++-7 Si cela n’est pas possible, la solution correcte est de compiler ROOT depuis les sources. De cette façon, vous pouvez vous assurer que ROOT est compilé avec le bon compilateur et les bons paramètres pour votre système. Voir Compiler ROOT depuis les sources pour plus d’instructions.

Si cela ne fonctionne pas non plus - typiquement à cause d’un compilateur ou d’un système d’exploitation peu commun - vous pouvez essayer l’astuce qui a fonctionné pour moi :

D’abord, exécutez la commande avec le compilateur g++ normal :

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

Elle devrait produire au moins une ligne de sortie telle que :

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

Si cela fonctionne, vous pouvez donner à root le nom du compilateur qu’il attend en créant un lien symbolique de g++ vers x86_64-linux-gnu-g++-7. N’oubliez pas de copier le nom du compilateur depuis le message d’erreur, car il peut différer sur votre système ou pour votre version de ROOT.

Vous devez placer ce lien symbolique dans un répertoire accessible sur le PATH. Si vous avez un accès sudo, utilisez /usr/local/bin, sinon, je recommande $HOME/usr/bin (mais vous devez l’ajouter à votre PATH).

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

Après cela, ROOT sera capable de trouver le faux compilateur et devrait fonctionner correctement.


Consultez les articles similaires par catégorie : ROOT