
rootアクセス権のないコンピュータに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
およびです。pwd
TABオートコンプリートを使用すると、ディレクトリ内のファイルをほとんど見つけることができ、ls
ディレクトリ内を移動できます。
uname -r
また、メッセージを返すSegmentation fault (core dumped)
ので、使用しているカーネルのバージョンがわからない。
答え1
これでログインできるので、大きな問題はありません。おそらく、シェルの起動スクリプトがここに追加され、~/lib
ライブラリLD_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 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/
これはトリックを行う必要があります!