最小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でコンパイルして実行しましたが、lsを実行すると表示されますが、Busyboxシステムにはまだ「ファイルが見つかりません」というメッセージが表示されます。明らかな問題を解決するために、プログラムと同じディレクトリで実行し、./ファイル名の前に入力しました。

答え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システムにこのファイルがない可能性があります。 ArchからBusyboxシステムにダイナミックリンカーファイルをコピーすることlibc.so(ディレクトリを維持します!)が機能するかもしれませんが、うまくいかないかもしれません。よくわかりません。

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

答え2

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

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

関連情報