出于某种原因,我试图制作一个只有必要组件才能运行的最小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编程的内容。