如何在裸Linux内核上安装glibc?

时间:2015-11-12 17:46:06

标签: c linux

出于某种原因,我试图制作一个只有必要组件才能运行的最小Linux系统。我成功地在我的系统上安装了BusyBox,但是我在安装glibc时遇到了麻烦。

我只是按照本网站上的说明操作: http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BusyBox_for_ARM

根据说明书,glibc生成的所有库都放在' / lib'目录。但是当我尝试按如下方式执行虚拟C程序时

#include <stdio.h>
int main { printf ("hello\n"); }
系统打印了一个&#34;未找到&#34;信息。据推测这条消息意味着系统无法找到glibc库。

如何让系统找到&#39; / lib&#39;中的库?目录默认情况下?如果Linux内核默认已从那里找到库,那可能是什么错误?

上述程序被放入&#39; / scratch&#39;目录名称为&#39; a.out&#39;。我尝试通过输入&#39; ./ a.out&#39;在目录中执行它。这是&#39; ls&#39;的结果。在根目录

bin  dev  etc  include  lib  linuxrc  proc  root sbin  scratch  sys  usr

正如我所提到的,所有的glibc库都在&#39; / lib&#39; 。目录

1 个答案:

答案 0 :(得分:1)

not found消息肯定不是由于缺少libc(您输入了哪些完全命令才能获得该消息?)。也许你有一些PATH问题,你的shell(可能是BusyBox)给你的?尝试输入可执行文件的完整路径.... 如果ldd(1)strace(1)可用,您可能需要使用它们。

你显然想要采取与Linux From Scratch非常相似的东西。

您可能对musl-libc感兴趣(它是GNU glibc的替代品,可能稍微容易构建)

Stricto sensu,你不能拥有一个只有一个裸Linux内核的运行系统,它至少需要一些初始程序(例如/sbin/init/bin/sh,或者你通过{{1}提供的任何东西} thru GRUB或其他加载器到你的内核)

顺便说一下,你的问题肯定是不是内核问题,它可能是一些dynamic linking一个(例如与ld.so(8)或其他任何&#34;解释器&#34;在ELF可执行文件中提及,请参阅elf(5))。当内核无法execve(2)某个文件时,它不会在 stderr 上输出,而是通过errno(3)发出错误通知(由{{3}指定) })

使用ABI&amp; <{3}}(可能是它们的交叉构建变体)在您的可执行文件中,以了解其中的内容。

我建议在进行此类路线之前,先阅读有关objdump(1)的更多信息。