Notre cluster de calcul exécute une très ancienne version de CentOS, avec un ancien noyau (2.6.18) et, bien sûr, d'anciennes bibliothèques et binaires. Parce que la mise à jour de l'ensemble nécessite beaucoup de travail sur tous les nœuds, ce n'est pas une option.
J'essaie de compiler et d'utiliser un programme qui nécessite C++11
et donc des versions plus récentes de gcc
(et / ou clang
). Parce que je ne veux pas du tout jouer avec le système, je veux le faire en tant qu'utilisateur non root dans une arborescence de répertoires locale.
Le problème est que cela gcc
nécessite une version plus récente glibc
que celle présente sur la ou les machines. Par conséquent, je dois conserver une version distincte et plus récente de glibc
dans mon lib/
arborescence locale , probablement comme décrit ici .
Où je suis perdu, comment "coder en dur" les chemins de mes bibliothèques locales dans tous les binaires requis, c'est-à-dire gcc
, g++
etc.? La définition de LD_LIBRARY_PATH sur mon lib/
arborescence locale empêche tous les binaires système de fonctionner ( ELF file OS ABI invalid
) car ils veulent utiliser mon nouveau libm.so
/ libc.so
contre lequel ils n'ont pas été compilés.
Donc, pour résumer: Quelle est la bonne façon de maintenir une nouvelle pile de développement local (contenant glibc
, gcc
etc.) en parallèle à un ancien système sans déconner en tant que root?
Comme question secondaire: la définition de LD_LIBRARY_PATH est publiée comme solution partout dans SE lorsqu'il s'agit de séparer glibc
. Pour moi, cela provoque les erreurs ci-dessus lorsque j'essaie d'exécuter un système binaire (comme ls
). Comment venir? Ai-je fait quelque chose de mal ou est-ce le comportement souhaité?
-rpath
(-Wl,rpath
) à l'éditeur de liens, l'éditeur de liens ajoutera également les chemins de laLD_RUN_PATH
variable d'environnement au chemin de recherche