Linux

最小的 Busybox/Linux 安裝 - 不會執行 C

  • February 14, 2016

我正在嘗試創建一個非常簡單的自定義 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,保存它,然後嘗試執行它。我收到了與您相同的“找不到文件”消息。

您甚至可能libc.so在您的 Busybox 系統上沒有該文件。僅將libc.soArch 和動態連結器文件從 Arch 複製到 Busybox 系統(保留目錄!)可能會起作用,但可能不會。我只是不確定。

要嘗試的一件事:安裝musl在您的 Arch 機器上。用 編譯你的簡單程序musl-gcc -static -o simple simple.c,移動那個沒有動態連結的執行檔,然後在 Busybox 系統上試一試。

引用自:https://unix.stackexchange.com/questions/261948