最小的 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 時顯示。為了解決顯而易見的問題,是的,我從與程序相同的目錄中執行它並
./
在文件名之前鍵入。
我的猜測是您在 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.so
Arch 和動態連結器文件從 Arch 複製到 Busybox 系統(保留目錄!)可能會起作用,但可能不會。我只是不確定。要嘗試的一件事:安裝
musl
在您的 Arch 機器上。用 編譯你的簡單程序musl-gcc -static -o simple simple.c
,移動那個沒有動態連結的執行檔,然後在 Busybox 系統上試一試。