簡體   English   中英

如何在裸 Linux 內核上安裝 glibc?

[英]How to install glibc on top of a bare Linux kernel?

出於某種原因,我正在嘗試制作一個只有基本組件才能運行的最小 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"); }

系統打印了“未找到”消息。 大概這條消息意味着系統找不到 glibc 庫。

如何讓系統默認在“/lib”目錄中找到庫? 如果默認情況下 Linux 內核已經從那里找到了庫,那可能出什么問題了?


上面的程序被放置在名為“a.out”的“/scratch”目錄中。 我試圖通過鍵入“./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= thru GRUB或其他一些加載程序提供的任何內容)你的內核)

順便說一句,您的問題肯定不是內核問題,它可能是一些動態鏈接問題(例如與ld.so(8)或您的ELF可執行文件中提到的任何“解釋器”有關,請參閱elf(5) )。 當內核無法execve(2)某個文件時,它不會在stderr輸出,通過errno(3)給出錯誤通知(由ABI指定)

在可執行文件上使用objdump(1)readelf(1) (可能是它們的交叉構建變體)來了解其中的內容。

我建議在進行這樣的路線之前閱讀更多關於Linux 編程的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM