Erreur lors de l’utilisation d’une version plus récente de glibc

J’essaie d’installer tensorflow sur un serveur Linux où je ne suis qu’un utilisateur sans l’autorisation root. Et je ne peux pas transférer des fichiers vers / depuis le serveur via un serveur de saut. Le système est le suivant:

Linux THENAME_OF_SURVER 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

J’ai installé le tensorflow à travers un stream d’ pip install tensorflow et un programme tensorflow affiche ce qui suit:

ImportError: /lib64/libc.so.6: version `GLIBC_2.16' not found

J’ai installé une nouvelle version de glibc

git clone git://sourceware.org/git/glibc.git cd glibc git checkout --track -b local_glibc-2.16 origin/release/2.16/master mkdir build cd build ../configure --prefix=/home/MYNAME/dependency/glibc-2.16 make -j4 make install

En suivant les instructions en ligne, j’ai modifié les variables d’environnement via:

export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib

MAIS cela m’amène à un problème: je ne peux utiliser aucune commande. Par exemple, j’ai appelé ls et ça m’avertirait comme ceci:

ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

J’ai ensuite suivi une autre instruction pour exécuter la commande comme suit:

/home/MYNAME/dependency/glibc-2.16/lib/ld-linux-x86-64.so.2 --library-path /home/MYNAME/dependency/glibc-2.16/lib:$LD_LIBRARY_PATH:/path/to/gcc-5.2.0/lib64:/usr/lib64/:/usr/lib64/ ls (Je ne sais pas où trouver le dossier similaire à gcc-5.2.0 , which gcc montre /usr/local/sbin/gcc , mais il est lié à /usr/local/gcc-5.3.0/bin/gcc , qui n’a pas de sous-dossier lib64)

Mais alors il est venu avec l’avertissement suivant:

ls: error while loading shared libraries: ls: cannot open shared object file

Je sais que je peux utiliser ls encore en exportant la variable à vider. Mais je ne peux toujours pas utiliser la nouvelle version de glibc. Quelqu’un pourrait-il m’aider avec comment relier correctement la nouvelle glibc? Toute suggestion serait appréciée!

EDIT: Les progrès sont donc les suivants:

  1. LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib python
    entraînerait python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

  2. /home/MYNAME/dependency/glibc-2.16/lib/ld-2.16.so python
    entraînerait python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

EDIT2 & RESUME:

Pour rendre la réponse de Employed Russian plus détaillée, je collerais mes solutions finales ici.

Mon but est d’utiliser tensorflow dans Python sur un serveur sur lequel je n’ai pas l’autorisation root. On m’a prévenu que ImportError: /lib64/libc.so.6: version 'GLIBC_2.16' not found lors de l’importation du tensorflow.

Sur la base de la réponse de Employed Russian, j’ai utilisé ce qui suit pour exécuter ma commande:

LD_LIBRARY_PATH=/home/USERNAME/dependency/glibc-2.17/lib/:/lib64/:/usr/local/gcc-5.3.0/lib64/ /home/USERNAME/dependency/glibc-2.17/lib/ld-2.17.so /home/USERNAME/anaconda2/bin/python

Divisez la commande en plusieurs parties (j’utiliserais ??? pour représenter les chemins différents pour des personnes différentes):

  1. LD_LIBRARY_PATH=
    • cette partie traite des dépendances
    • : signifie diviser
    • ???/glibc-2.17/lib/
    • /lib64/ et /usr/local/gcc-5.3.0/lib64/ : j’ai trouvé ces dossiers par find / -name 'libgcc_s.so.1' car j’étais
  2. /???/glibc-2.17/lib/ld-2.17.so
  3. /???/python le chemin de votre exécutable. Pour Python, import sys; print(sys.executable) import sys; print(sys.executable) pour voir votre chemin Python.

Autres choses:

  1. glibc-2.17 est à télécharger depuis gnu . J’ai choisi 2.17 car tensorflow a besoin de 2.17 et 2.17 fonctionne correctement.
  2. Il y a un autre problème de cette solution. J’ai parfois besoin d’appeler la commande shell en Python comme os.system('ls') ou os.system('python xxx.py') . Mais il m’a prévenu que si je l’utilisais normalement: sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument et je n’ai pas trouvé de solution suffisante pour cela.

export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib

Cette réponse explique pourquoi LD_LIBRARY_PATH ne fonctionne pas et ce que vous devriez faire à la place.

J’ai lu votre message et j’ai essayé …
python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

L’erreur signifie généralement que vous avez une incompatibilité entre ld-linux et libc.so.6 . Ils doivent correspondre.

Si vous utilisez l’appel direct du chargeur via /home/MYNAME/.../ld-2.16.so , vous devez également /home/MYNAME/.../libc.so.6 pour le chargement.

Vous pouvez le faire en transmettant --library-path ... à ld-2.16.so ou en définissant LD_LIBRARY_PATH manière appropriée.

Votre commande avec ld-2.16 --library-path ... ls est presque correcte. La chose qui vous manque est que ld-2.16 ne cherchera pas votre PATH . Vous devez lui donner un chemin complet : ld-2.16 --library-path ... /bin/ls .

Dans mon cas, c’était centos 6 avec python pour pytorch .

J’ai eu des erreurs comme, etc .:

 libraries: __vdso_time: invalid mode for dlopen(): Invalid argument ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/evaldsu/.conda/envs/conda_env/lib/python3.6/site- 

J’ai installé avec glibc-2.17 dans le répertoire local / opt / exp_soft / tools

alors j’ai installé dans l’outil de correction de conda env (peut installer également en utilisant d’autres outils):

 conda install -c conda-forge patchelf 

alors j’ai patché le binary de python pour utiliser le chemin différent de glibc (vous pouvez le faire avec n’importe quel binary). Sachez que cela vous changera en pyhton binary.

 patchelf --set-rpath /opt/exp_soft/tools/glibc-2.17/lib:$HOME/.conda/envs/conda_inf/lib:/usr/lib64:/lib64:/lib --set-interpreter /opt/exp_soft/tools/glibc-2.17/lib/ld-linux-x86-64.so.2 /home/evaldsu/.conda/envs/conda_inf/bin/python3.6 

Une autre option est d’installer ce script si vous avez un access administrateur complet:

https://gist.github.com/harv/f86690fcad94f655906ee9e37c85b174