web-dev-qa-db-fra.com

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

J'essaie d'installer tensorflow sur un serveur Linux sur lequel je ne suis qu'un utilisateur sans la permission root. Et je ne peux pas transférer de fichiers de/vers lui car je le ssh 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 via pip install tensorflow et un programme tensorflow affiche les informations suivantes:

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

Après avoir suivi les instructions en ligne, j'ai modifié les variables d'environnement en:

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

MAIS cela me conduit à un problème: je ne peux utiliser aucune commande. Par exemple, j'ai appelé ls et cela 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, mon which gcc indique /usr/local/sbin/gcc, mais il est lié à /usr/local/gcc-5.3.0/bin/gcc, qui ne contient 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 à nouveau utiliser ls en exportant la variable à vider. Mais je ne peux toujours pas utiliser la nouvelle version de glibc. Quelqu'un pourrait-il m'aider à lier correctement la nouvelle glibc? Toute suggestion serait appréciée!

EDIT: Donc, les progrès sont les suivants:

  1. LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib python
    donnerait 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
    donnerait python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

EDIT2 & SOMMAIRE:

Pour que la réponse de Employed Russian soit plus détaillée, je voudrais coller ici mes solutions finales.

Mon objectif est d'utiliser tensorflow en Python sur un serveur pour lequel je ne dispose pas de l'autorisation root. J'ai été averti que ImportError: /lib64/libc.so.6: version 'GLIBC_2.16' not found lors de l'importation 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 d'accès différents pour différentes personnes):

  1. LD_LIBRARY_PATH=
    • cette partie traite des dépendances
    • : signifie divisé
    • ???/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' parce que 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) pour voir votre chemin Python.

Autres choses:

  1. glibc-2.17 est téléchargé depuis gnu . J'ai choisi 2.17 parce que tensorflow a besoin de 2.17 et 2.17 fonctionne bien.
  2. Il y a un autre problème de cette solution. J'ai parfois besoin d'appeler une commande Shell en Python comme os.system('ls') ou os.system('python xxx.py'). Mais cela m’avait averti que si je l’utilisais normalement, sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument et que je n’ai pas trouvé de solution satisfaisante.
7
Kaho Chan

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 essayé ...
python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

L'erreur signifie généralement que vous avez un incompatibilité entre ld-linux et libc.so.6. Ils doivent correspondent.

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

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

Votre commande avec ld-2.16 --library-path ... ls est presque correct. Ce qui vous manque, c'est que ld-2.16 va not rechercher votre PATH. Vous devez lui donner full nom du chemin: ld-2.16 --library-path ... /bin/ls.

2
Employed Russian

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é à côté de glibc-2.17 dans le répertoire local/opt/exp_soft/tools

puis j'ai installé dans l'outil de correction de conda env (je peux également l'installer avec d'autres outils):

conda install -c conda-forge patchelf

puis j'ai patché le binaire de python pour utiliser un chemin différent de la glibc (vous pouvez le faire avec n'importe quel binaire). Sachez que cela va vous changer le binaire Python.

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 consiste simplement à installer ce script si vous disposez d'un accès administrateur complet:

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

2
Evalds Urtans