.
.
.
checking for kernel header at least 3.2.0... ok
*** On GNU/Linux systems the GNU C Library should not be installed into
*** /usr/local since this might make your system totally unusable.
*** We strongly advise to use a different prefix. For details read the FAQ.
*** If you really mean to do this, run configure again using the extra
*** parameter `--disable-sanity-checks'.
Pre-configuration commands finished with code: 1
Cコードを見たかったので、glibcを複製してclionで開きましたが、このエラーが発生しました。
- 私のシステムにどのように構築しますか:Debian?
- Debian はなぜそんなことをするのでしょうか。
答え1
- Debian はなぜそんなことをするのでしょうか。
/usr/local/lib
これは、Debianによるものではなく、ほとんどのLinuxシステムでCコンパイラと動的リンカ/ローダが設定されているためです。同じ名前のライブラリがおよびにある場合、および/usr/lib
のライブラリが/usr/local/lib
優先されます。
これにより、システム管理者はシステム内のすべてのライブラリをカスタムライブラリに簡単に置き換え、パッケージの更新後もカスタムライブラリを保持できます。
しかし、現在行っていることを実際に知らない限り、既存のインストールをカスタムインストールに置き換えるのはglibc
良い考えではありません。新しいバージョンをインストールするために使用されるツールを含む、システムのほとんどすべてのコマンドとプログラムに影響します。glibc
。
GNU/Linux システムの /usr/local に glibc がインストールされないのはなぜですか?
/usr/local/include
GNU C コンパイラはこれらのディレクトリを特別な方法で処理し、/usr/local/lib
システムディレクトリを検索します。 GNU / Linuxでは、/usr/include
システムディレクトリに/usr/lib
潜在的に異なるglibcバージョンが含まれており、他のglibcインストールの特定のファイルを混在させることはサポートされておらず、破損する可能性があるため、システム全体が破損する可能性があります。glibcのインストールをテストするには、別のディレクトリにインストールする必要があります
DESTDIR
(他の値で上書きしないでください--prefix
。これは--prefix=/usr
許可されます)。
構築したばかりのGNU Cライブラリプロジェクトライブラリをどのようにインストールしますか?
/tmp/glibc
これらのライブラリをインストールする唯一の正しい方法は、まず via などの一時ディレクトリにインストールし、そのディレクトリをmake install DESTDIR=/tmp/glibc
初期ルートディスクにコピーし、初期ルートディスクを起動し、結果をルートファイルシステムにコピーし、ルートファイルシステムを起動します。最後のステップとして機能します。それはただ今日はglibcをインストールする安全な方法です。ただし、どのディストリビューションもこれを実行しないことに注意してください。そうすればそうするので彼らはそうしない。必要glibcをインストールして再起動してください。現在実行中のすべてのプロセスがセキュリティ更新後にglibcを再ロードする場合にのみ必要です(実行中のプロセスはまだ古いライブラリを実行するため)。代わりに、ディストリビューションはパッケージマネージャを使用してライブラリアーカイブを解凍し、実行中のシステムにインストールします。これは実際には非常に危険です。ある時点になると、システムに新しいライブラリと古いライブラリの混合コピーがあり、実行プロセスを開始できなくなる可能性があります。同様に、アップグレード中に言語ロケールを含むローカライズアーカイブが再作成されます。この期間中に必要なローカライゼーションがない場合(まだアーカイブで書き換えられていない場合)、プロセスは開始されない可能性があります。パッケージ管理システムも免疫されません。たとえば、rpmはglibcをインストールするときに新しいプロセスを実行せず、代わりに組み込みのluaインタプリタを使用してスクリプトを実行し、rpmが以前のプロセスを使用して全体を実行できるようにする必要がありました。凝集力でライブラリのコピーをインストールし、新しいコピーもインストールします。
要約すると、glibcをインストールする最善の方法は、他のシステムで使用されているディスクにインストールすることです。通常、これは初期ルートディスクで行うことができ、次善策は静的または操作されたアプリケーションを介してコピーすることです。不完全な部分的なインストールでは、新しいプロセスを実行せずにファイルが所定の位置にあります。そのうちの1つを選択してください。結局のところ、後者は、共有ランタイムを持つ負荷の高いシステムではサポートされなくなります。
- 私のシステムにどのように構築しますか:Debian?
FAQで述べたように、DESTDIR
環境変数です。./configure
glibcスクリプトのセキュリティチェックが実行されないようにする前に、これを実行してください。
LD_LIBRARY_PATH
ビルドが完了したら、環境変数を$DESTDIR/lib
。ただし、上記のように、Debian標準バージョンのglibcに属する他のファイルと競合する可能性があります。
新しいglibcをテストするためのより良い方法は、仮想マシンを準備してからそのディスクをホストシステムにマウントすることです(仮想マシンは停止します)。これにより、必要になる前に新しいglibcのすべてのコンポーネントを仮想マシンにインストールできます。すべてのコンポーネントを実行します。リスク非互換性。その後、仮想マシンを起動し、何が起こっているのかを確認できます。
仮想マシンがまだ機能し、新しいglibcがその時点で実行したいテストに合格した場合その時ホストシステムへの新しいglibcのインストールについて考えることができます。これを行うには、慎重に計画を立てる必要があります。新しいglibcをインストールするために外部メディアから起動しますか?または、新しいglibcを*.deb
パッケージ(セット)としてパッケージ化し、パッケージマネージャを使用してインストールしますか?どちらにしても、より確実にバックアップが最新ですそしてブートメディアが用意されています。始める前に。
パッケージングパスを選択することにした場合は、まずディストリビューションのglibc標準バージョンのソースパッケージをロードし、パッケージングと埋め込みプリインストール/インストール後にスクリプトを詳細に検討することをお勧めします。パッケージマネージャは特定のコンテンツを持つことができます。プロセスの必須ステップ非常に正確。
答え2
スクリプト--prefix=<some other directory>
に渡す必要があります。ファイルが[0]configure
にインストールされていることを確認してください。<some other directory>
glibc
inの互換性のないバージョンをインストールすると、/usr/local
システムが利用できなくなる可能性があります。
コンパイルするには、glibc
ソースツリーのルートに移動して
cd build
../configure --prefix=<some other directory> # /tmp/compileGlibc
make -j$(nproc)
glibc
.
make install
インストールファイルをにコピーします<some other directory>
。
また、スクリプトに渡してデフォルトのglibc
コンパイルを使用することもできます。PREFIX
--disable-sanity-checks
configure