通常、古いプログラム(Linuxカーネルバージョン2.4がインストールされているシステムからコピーされています)でも、多数のライブラリに依存するか、フレームワークを使用しない限り、最新のLinuxシステムでファイルを実行します。
既存のシステムにコピーすると、新しいプログラム(しばしばint main(){return 0;}
)も実行されません。
現代のシステムで動的にリンクされた実行可能ファイルを作成するには? chrootや仮想マシンにレガシーシステムを設定したくありません。古いライブラリを「クロスコンパイル」することは可能ですか?
答え1
レガシーシステムを別の環境(chrootまたはVM)に設定するのが最も簡単な方法です。 (Debianでは、schrootとdebootstrapを使用するとこれが簡単になります。64ビットDebian / Ubuntuで32ビットプログラムを実行するにはどうすればよいですか?)
以前のライブラリバージョンをクロスコンパイルすることが可能です。 「単純に」これらの古いライブラリ用の開発パッケージをインストールし、コンパイラにそのバージョンを指すようにします。以前の標準ライブラリに対応するには、コンパイラ自体を再コンパイルする必要があります。すべての開発パッケージを正しくインストールして構成することが困難です。以下を行う必要があります。
- 古い標準ライブラリをコンパイルします。
.a
前の手順で生成されたヘッダーとファイルをコンパイラに割り当てて、ライブラリAをコンパイルします。 (gcc、pass-nostdinc
、-nostdinc++
optionの場合、他のコンパイラには通常同様のフラグがあります。)- プログラムがコンパイルされるまで、依存関係チェーンに沿ってこれを繰り返します。