web-dev-qa-db-ja.com

最小限の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を実行すると表示されます。明らかなことに対処するために、はい、プログラムと同じディレクトリから実行し、ファイル名の前に./と入力しました。

4
Tim

私の推測では、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システムで試してください。

4
Bruce Ediger

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

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

2
Rui F Ribeiro