これを試みたときにシステムがクラッシュし、すべてのプログラムが直ちにセグメントエラーを引き起こしました。私はこれがld-linux-x86-64.so.2
inの新しいバージョンをインストールするためだと思いますが、プログラムをロードするときに新しいバージョンの代わりにin/lib64
の古いバージョンを探します。 (明らかにldとlibcは一致する必要がありますか?)libc.so.6
/lib/x86_64-linux-gnu
/lib64
/lib64
上に載せて/etc/ld.so.conf.d/x86_64-linux-gnu.conf
走ってみましたldconfig
。しかし、何らかの理由でこれは何も解決しませんでした。
答え1
関連性のないものを検索している間、私のインストールが古いlibcを選ぶ理由を誤って見つけました。新しいlibcに古いABIバージョンがあったからです(https://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so)。
これが私がしたことです:
/lib
/lib32
、、、の内容をバックアップしました/lib64
。検索パスの上に配置
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
されるように編集しました。/lib64
--prefix=/usr --enable-kernel=2.6.26
以前のglibcバージョン(2.13)と一致するオプションを使用してglibcの新しいバージョン(2.19)を設定しました。新しいglibcを作成しました。問題はあまりなかった。
su
ルートアクセス権を取得した後make install
。ld-linux-x86-64.so.2
libc.so.6
この問題を解決するために実行しました
ldconfig
(もちろんまだrootとして)。インストールを再開しました(
make install
)。一部のコマンドを呼び出すと、エラーが発生しますgcc
。私はこれがヘッダーの不一致によるものであることがわかりました。新しいバージョンは、新しいバージョンではなく/usr/include/stdio.h
古いバージョンをどこでも使用していました。/usr/include/x86_64-linux-gnu/sys/cdefs.h
/usr/include/sys/cdefs.h
だから問題を解決するためにディレクトリを削除し、
/usr/include/x86_64-linux-gnu/sys
ヘッダーも置き換えました/usr/include/sys
。a.out.h
fpu_control.h
ieee754.h
/usr/include/x86_64-linux-gnu
/usr/include
インストールを再開しました(
make install
)。ついに成功しました。
システムを再起動した後、すべてが完璧に動作しました。
私のシステムに64ビットバージョンでインストールされている32ビットバージョンのlibcを更新しようとすると、何が起こるのかわかりませんでした。私はそれが再びすべてをひどく台無しにするだろうと疑います。成功したら、この回答を更新します。