web-dev-qa-db-ja.com

新しいバージョンのglibcの使用中のエラー

Root権限のないユーザーであるLinuxサーバーにtensorflowをインストールしようとしています。ジャンプサーバーを介してSSHでファイルを転送できない。システムは次のとおりです。

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

pip install tensorflowを介してテンソルフローをインストールしました。テンソルフロープログラムは次のように表示します。

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

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

オンラインの指示に従って、私は環境変数を次のように変更しました:

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

しかし、これにより問題が発生します。コマンドを使用できません。たとえば、lsを呼び出すと、次のように警告されます。

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

次に、別の指示に従って、次のようにコマンドを実行しました。

/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/ lsgcc-5.2.0と同様のフォルダーがどこにあるかわかりません。which gccには/usr/local/sbin/gccが表示されますが、lib64サブフォルダーがない/usr/local/gcc-5.3.0/bin/gccにリンクしています)

ただし、次の警告が表示されました。

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

変数を空にエクスポートすることで、lsを再び使用できることを知っています。しかし、私はまだ新しいバージョンのglibcを使用できません。新しいglibcを正しくリンクする方法を教えてください。どんな提案もいただければ幸いです!

編集:したがって、進行状況は次のようになります。

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

EDIT2&要約:

雇用ロシアの回答をより詳細にするために、ここに私の最終的な解決策を貼り付けます。

私の目標は、ルート権限のないサーバーでPythonでテンソルフローを使用することです。テンソルフローをインポートするときにImportError: /lib64/libc.so.6: version 'GLIBC_2.16' not foundと警告されました。

Employed Russianの回答に基づいて、私は次のコマンドを使用してコマンドを実行しました。

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

コマンドを次の部分に分割します(???を使用して、ユーザーごとに異なるパスを表します)。

  1. LD_LIBRARY_PATH=
    • この部分は依存関係を扱います
    • :は分割を意味します
    • ???/glibc-2.17/lib/
    • /lib64/および/usr/local/gcc-5.3.0/lib64/:これらのフォルダーはfind / -name 'libgcc_s.so.1'で見つかりました。
  2. /???/glibc-2.17/lib/ld-2.17.so
  3. /???/pythonは、実行可能ファイルのパスです。 Pythonの場合、import sys; print(sys.executable)でPythonパスを確認します。

他のもの:

  1. glibc-2.17は gn からダウンロードできます。 tensorflowには2.17と2.17が必要なので、2.17を選択しました。
  2. このソリューションには別の問題があります。 Python os.system('ls')またはos.system('python xxx.py')のようにシェルコマンドを呼び出す必要がある場合がありますが、通常の方法で使用すると、次のように警告されます。 sh: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argumentと私はこれのための十分な解決策を見つけていません。
9
Kaho Chan

_export LD_LIBRARY_PATH=/home/MYNAME/dependency/glibc-2.16/lib_

この答え は、_LD_LIBRARY_PATH_が機能しない理由と、代わりに何をすべきかを説明しています。

私はあなたの投稿を読んで試してみました...
python: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument

エラーは通常、_ld-linux_と_libc.so.6_の間に不一致があることを意味します。それらは一致する必要があります

_/home/MYNAME/.../ld-2.16.so_を介した直接ローダー呼び出しを使用している場合は、_/home/MYNAME/.../libc.so.6_がロードされるように調整する必要もあります

_--library-path ..._を_ld-2.16.so_に渡すか、または_LD_LIBRARY_PATH_を適切に設定することにより、これを行うことができます。

_ld-2.16 --library-path ... ls_を使用したコマンドはほぼ正しいです。不足しているのは、_ld-2.16_がPATHを検索しないことではないということです。 fullパス名を指定する必要があります:_ld-2.16 --library-path ... /bin/ls_。

5

私の場合、centos 6with python forpytorch

などのエラーがありました:

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-

Glibc-2.17と一緒にローカルディレクトリの/ opt/exp_soft/toolsにインストールしました

次に、conda envパッチツールにインストールしました(他のツールを使用してインストールすることもできます):

conda install -c conda-forge patchelf

次に、pythonのバイナリにパッチを適用して、異なるglibcパスを使用します(任意のバイナリでこれを実行できます)。これにより、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

別のオプションは、完全な管理者アクセス権がある場合にこのスクリプトをインストールすることです。

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

2
Evalds Urtans