3

私のディストリビューション (Arch Linux) は最近、そのツールチェーンでサポートされている Linux カーネルの最小バージョンを増やしました。静的にリンクしてから Web サーバーにアップロードする Web アプリケーションをコンパイルしていますが、Web サーバーのカーネル バージョンは、新しいツールチェーンでコンパイルされた静的ライブラリには古すぎます。(サーバー上で静的バイナリを実行しようとすると、セグメンテーション違反が発生します。) GNU ツールチェーン (GCC、binutils、glibc) を使用してアプリケーションをコンパイルし、新しいカーネル バージョンを必要とする機能を除外する方法はありますか?

4

2 に答える 2

2

glibc の互換性は、実際には一方向でのみ保証されています。(古いバイナリは新しいシステムで動作しますが、その逆は必ずしもそうではありません。)

バイナリが古いシステムで動作することを保証するには、古い glibc とリンクしてコンパイルします。これを行う最も簡単な方法は、古いディストリビューションを見つけることですが、ビルド システムが使用するものとは異なる libc をターゲットとする「 crosstool 」または同様のクロスコンパイル ツールチェーンをセットアップすることをお勧めします (これにより、ホスト間での繰り返し可能なビルドが可能になります。システムとは何ですか)。

于 2010-12-22T07:02:35.960 に答える
0

ありがとう。また、glibc の --enable-kernel オプションも見つけました。これにより、以前のカーネルでの作業が可能になります。

于 2010-12-28T21:19:33.040 に答える