非常に最小限のカスタムBusybox/Linuxディストリビューションを作成しようとしていますが、これは確かに頭上にあるタスクですが、試してみることにしました。私の問題は、BusyboxまたはBusyboxユーティリティではないCプログラムを実行しようとすると、ashが文句を言い、ファイルが見つからないことを通知することです。 Archシステムからパーティションをマウントし、GNU binutilsとuClibc;ダイスなし。ライブラリに依存せずに考えられる最も単純なCプログラムも作成しました。
int main(int argc, char *argv[])
{
return 0;
}
コンパイルしてArchで実行しましたが、Busyboxシステムで「ファイルが見つかりません」というメッセージが表示されましたが、lsを実行すると表示されます。明らかなことに対処するために、はい、プログラムと同じディレクトリから実行し、ファイル名の前に./
と入力しました。
私の推測では、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
に変更し、保存して実行しようとしました。あなたが受け取ったのと同じ「ファイルが見つかりません」というメッセージが表示されました。
Busyboxシステムにlibc.so
ファイルがない場合もあります。 libc.so
およびダイナミックリンカーファイルをArchからBusyboxシステムにコピーする(ディレクトリを保持する)だけで機能する可能性はありますが、機能しない可能性があります。よくわかりません。
試してみるべきことの1つは、Archマシンにmusl
をインストールすることです。 musl-gcc -static -o simple simple.c
を使用して単純なプログラムをコンパイルし、動的にリンクされたものがない実行可能ファイルを移動して、Busyboxシステムで試してください。
UClibcツールチェーンをビルドまたはインストールし、それを使用してプログラムをコンパイル/リンクする必要があります。標準のgcc/make/...でそれらをコンパイルしません。