最小限の Busybox/Linux インストール - C を実行できません

最小限の Busybox/Linux インストール - C を実行できません

私は、非常にミニマルなカスタム Busybox/Linux ディストリビューションを作成しようとしています。これは、確かに私には手に負えない作業ですが、試してみようと思いました。問題は、Busybox または Busybox ユーティリティ以外の C プログラムを実行しようとすると、ash がエラーを出して、ファイルが見つからないと表示することです。Arch システムからパーティションをマウントし、GNU binutils と uClibc をインストールしましたが、だめでした。また、ライブラリに依存しない、考えられる限り最もシンプルな C プログラムも作成しました。

int main(int argc, char *argv[])
{
    return 0;
}

コンパイルして Arch で実行しましたが、Busybox システムでは依然として「ファイルが見つかりません」というメッセージが表示されました。ただし、ls を実行すると表示されます。明らかなことに対処するために、はい、プログラムと同じディレクトリから実行し、./ファイル名の前に入力しました。

答え1

私の推測では、Busybox システムに適切なダイナミック リンカーがないと思われます。

Archシステムでは、次のようにします: ldd ./simplestprogram

ldd次のような出力が得られると思います:

linux-vdso.so.1 =>  (0x00007fff9b34f000)
libc.so.6 => /lib64/libc.so.6 (0x0000003b19e00000
/lib64/ld-linux-x86-64.so.2 (0x0000003b19a00000)

最後の行は/lib64/ld-linux-x86-64.so.2ダイナミック リンカーです。Busybox システムには存在しないと思います。

私は Arch ラップトップで「hello, world」プログラムをコンパイルし、vimバイナリ モードで に変更して/lib64/ld-linux-x86-64.so.2保存/lib65/ld-linux-x86-64.so.2し、実行しようとしました。あなたと同じ「ファイルが見つかりません」というメッセージが表示されました。

libc.soBusybox システム上にファイルがない可能性もあります。Archlibc.soから Busybox システムにダイナミック リンカー ファイルをコピーするだけで (ディレクトリは保持されます!) 機能する可能性もありますが、機能しない可能性もあります。よくわかりません。

試していただきたいことの 1 つは、muslArch マシンにインストールすることです。 で簡単なプログラムをコンパイルしmusl-gcc -static -o simple simple.c、動的にリンクされていない実行可能ファイルを移動して、Busybox システムで試してください。

答え2

uClibc ツールチェーンをビルドまたはインストールし、それを使用してプログラムをコンパイル/リンクする必要があります。標準の gcc/make/... を使用してコンパイルしないでください。

本当に uClibc ツールチェーンを構築する必要がありますか?

関連情報