c-如何在裸Linux内核上安装glibc

  • 本文关键字:内核 安装 glibc Linux 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 ("hellon"); }

系统打印了一条"未找到"的消息。这个消息可能意味着系统找不到glibc库。

默认情况下,如何让系统在"/lib"目录中找到库?如果Linux内核在默认情况下已经从那里找到了库,那么会出什么问题呢?


上面的程序被放在名为"a.out"的"/strack"目录中。我试图通过键入"在目录中执行它/a.out。这是根目录中的"ls"的结果

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

正如我提到的,所有的glibc库都在"/lib"目录中。

not found消息肯定不是因为缺少libc(您键入了哪些确切的命令来获得它?)。也许你有一些PATH问题,而你的shell(可能是BusyBox)给了你这个问题?尝试键入可执行文件的整个路径。。。。如果ldd(1)或strace(1)可用,则可能需要使用它们。

你显然想做一些与Linux From Scratch非常相似的事情。

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

严格意义上说,你不可能有一个只有裸Linux内核的运行系统,它至少需要一些初始程序(例如/sbin/init/bin/sh,或者你通过init=、GRUB或其他内核加载程序提供的任何程序)

顺便说一句,你的问题肯定不是内核问题,它可能是一些动态链接问题(例如,与ld.so(8)或ELF可执行文件中提到的任何"解释器"有关,请参阅ELF(5))。当内核无法执行(2)某个文件时,它不会在stderr上输出,而是通过errno(3)(由ABI指定)发出错误通知

使用objdump(1)&在您的可执行文件上读取(1)(也许是它们的交叉构建变体),以了解其中的内容。

我建议在采取这样的路线之前,先阅读更多关于Linux编程的内容。

最新更新