
私は、非常にミニマルなカスタム 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.so
Busybox システム上にファイルがない可能性もあります。Archlibc.so
から Busybox システムにダイナミック リンカー ファイルをコピーするだけで (ディレクトリは保持されます!) 機能する可能性もありますが、機能しない可能性もあります。よくわかりません。
試していただきたいことの 1 つは、musl
Arch マシンにインストールすることです。 で簡単なプログラムをコンパイルしmusl-gcc -static -o simple simple.c
、動的にリンクされていない実行可能ファイルを移動して、Busybox システムで試してください。
答え2
uClibc ツールチェーンをビルドまたはインストールし、それを使用してプログラムをコンパイル/リンクする必要があります。標準の gcc/make/... を使用してコンパイルしないでください。