最小 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 上运行,但在我的 Busybox 系统上仍然给出了“文件未找到”的信息,尽管当我运行 ls 时会显示该信息。为了解决显而易见的问题,是的,我从与程序相同的目录运行它并./在文件名之前键入。

答案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.so您的 Busybox 系统上甚至可能没有该文件。仅将libc.so和动态链接器文件从 Arch 复制到 Busybox 系统(保留目录!)可能会起作用,但也可能不起作用。我只是不确定。

要尝试的一件事是:安装musl在您的 Arch 机器上。使用 编译您的简单程序musl-gcc -static -o simple simple.c,移动该可执行文件(没有动态链接的任何内容),然后在 Busybox 系统上尝试它。

答案2

您需要构建或安装 uClibc 工具链,并用它来编译/链接您的程序。您不能使用标准 gcc/make/... 来编译它们。

我真的需要构建 uClibc 工具链吗?

相关内容