私のディストリビューション (Arch Linux) は最近、そのツールチェーンでサポートされている Linux カーネルの最小バージョンを増やしました。静的にリンクしてから Web サーバーにアップロードする Web アプリケーションをコンパイルしていますが、Web サーバーのカーネル バージョンは、新しいツールチェーンでコンパイルされた静的ライブラリには古すぎます。(サーバー上で静的バイナリを実行しようとすると、セグメンテーション違反が発生します。) GNU ツールチェーン (GCC、binutils、glibc) を使用してアプリケーションをコンパイルし、新しいカーネル バージョンを必要とする機能を除外する方法はありますか?
質問する
1633 次
2 に答える
2
glibc の互換性は、実際には一方向でのみ保証されています。(古いバイナリは新しいシステムで動作しますが、その逆は必ずしもそうではありません。)
バイナリが古いシステムで動作することを保証するには、古い glibc とリンクしてコンパイルします。これを行う最も簡単な方法は、古いディストリビューションを見つけることですが、ビルド システムが使用するものとは異なる libc をターゲットとする「 crosstool 」または同様のクロスコンパイル ツールチェーンをセットアップすることをお勧めします (これにより、ホスト間での繰り返し可能なビルドが可能になります。システムとは何ですか)。
于 2010-12-22T07:02:35.960 に答える
0
ありがとう。また、glibc の --enable-kernel オプションも見つけました。これにより、以前のカーネルでの作業が可能になります。
于 2010-12-28T21:19:33.040 に答える