ほとんどコマンドが機能しません - 再配置エラー: シンボル __getrlimit、バージョン GLIBC_PRIVATE が libc.so.6 で定義されていません

ほとんどコマンドが機能しません - 再配置エラー: シンボル __getrlimit、バージョン GLIBC_PRIVATE が libc.so.6 で定義されていません

私はルートアクセス権のないマシンに SSH で接続しています。何かをインストールするために、自分のマシンからライブラリをアップロードし、~/libリモート ホストのディレクトリに配置しました。

現在、実行するほぼすべてのコマンドで、以下のエラー (例はls) またはSegmentation fault (core dumped)メッセージが表示されます。

ls: relocation error: /lib/libpthread.so.0: symbol __getrlimit, version 
GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

これまで正常に実行できたコマンドは と だけですcd。TABpwdキーを押して を自動補完すると、ディレクトリ内のファイルをほぼ見つけられるのでls、ディレクトリ間を移動できます。

uname -rというメッセージも返されるSegmentation fault (core dumped)ので、使用しているカーネルのバージョンがわかりません。

答え1

ログインできるので、大きな問題は発生していません。おそらく、シェルの起動スクリプトが に追加され~/libLD_LIBRARY_PATHそれが 内の不良ライブラリとともに~/lib、発生している問題の原因となっていると考えられます。

これを修正するには、

unset LD_LIBRARY_PATH

rmこれにより、vimなどを実行して問題のあるライブラリを削除し、必要に応じて起動スクリプトを編集できるようになります。

答え2

問題は、 のコピーをディレクトリglibcに配置した~/libが、そのライブラリがアップロード先のシステムと互換性がないことです。ライブラリは~/libで指定されているとおりに参照されています$LD_LIBRARY_PATH

これを一時的に修正するには、シェルに組み込まれているものと同じようunset LD_LIBRARY_PATHに、単にこれを実行しますunset。その後、お気に入りのテキスト エディターを実行して、起動ファイル内で最初に変数を設定しているものをすべて削除できます。

答え3

Linux Yocto Sumo v4.14 で見つけたものですが、すべての Linux カーネルで同じであるはずです:

  • 主要ライブラリの 2 つのバージョン (/lib 内のデフォルト バージョンと、/usr/lib 内のユーザーがインストール後または追加後に作成したバージョン) を切り替えることができます。
  • そのためには、各コマンドでLD_LIBRARY_PATH変数を設定するだけです。または、最初からexportを呼び出します。
export LD_LIBRARY_PATH=/lib
# now everything should work again since there should 
be a valid backup version of glibc in /lib

# try use a command again 
ls ./

#if this works you can overwrite the broken version of glibc in /usr/lib
cp -faL /lib/libc.so* /usr/lib/
cp -faL /lib/libc-*so* /usr/lib/

#should be optional but for the sake of completeness, as the libc package 
# installs all of the following: 
# direct dependencies and are versioned using 
# the same version number as glibc
cp -faL /lib/ld*.so* /usr/lib/
cp -faL /lib/libdl*.so* /usr/lib/
cp -faL /lib/libm*.so* /usr/lib/
cp -faL /lib/libnsl*.so* /usr/lib/
cp -faL /lib/libnss*.so* /usr/lib/
cp -faL /lib/librt*.so* /usr/lib/
cp -faL /lib/libutil*.so* /usr/lib/
cp -faL /lib/libpthread*.so* /usr/lib/
cp -faL /lib/libcrypt*.so* /usr/lib/
cp -faL /lib/libresolv*.so* /usr/lib/







これでうまくいくはずです!

関連情報