LearnHouse

[轉]uclibc,eglibc,glibc差別

來源:https://read01.com/yO55Pg.html

1.Glibc
glibc = GNU C Library
是GNU項(GNU Project)目,所實現的 C語言標準庫(C standard library)。
目前,常見的桌面和伺服器中的GNU/Linux類的系統中,都是用的這套C語言標準庫。
其實現了常見的C庫的函數,支持很多種系統平台,功能很全,但是也相對比較臃腫和龐大。
2.uClibc
一個小型的C語言標準庫,主要用於嵌入式。
其最開始設計用於uClinux(註:uClinux不支持MMU),因此比較適用於微處理器中。
對應的,此處的u意思是μ,Micro,微小的意思。

uClibc的特點:
(1)uClibc比glibc要小很多。
(2)uClibc是獨立的,為了應用於嵌入式系統中,完全重新實現出來的。和glibc在源碼結構和二進位上,都不兼容。

3.EGLIBC
EGLIBC = Embedded GLIBC
EGLIBC是,(後來)glibc的原創作組織FSF所(新)推出的,glibc的一種變體,目的在於將glibc用於嵌入式系統。

EGLIBC的目標是:
(1)保持源碼和二進位級別的兼容於Glibc
原始碼架構和ABI層面兼容
如果真正實現了這個目標,那意味著,你之前用glibc編譯的程序,可以直接用eglibc替換,而不需要重新編譯。
這樣就可以復用之前的很多的程序了。
(2)降低(內存)資源占用/消耗
(3)使更多的模塊為可配置的(以實現按需裁剪不需要的模塊)
(4)提高對於交叉編譯(cross-compilation)和交叉測試(cross-testing)的支持
Eglibc的最主要特點就是可配置,這樣對於嵌入式系統中,你所不需要的模塊,比如NIS,locale等,就可以裁剪掉,不把其編譯到庫中,使得降低生成的庫的大小了。
更多特點,可以去看:Eglibc的特點

【glibc, uClibc, Elibc的淵源/歷史/區別/聯繫】
1. 寫程序,需要用到很多c語言的庫函數。所有的庫函數加起來,就是對應的C語言(標準)函數庫。
2. 目前在普通GNU/Linux系統中所用的C語言標準庫,叫做glibc。其功能很全,函數很多,但是代碼太多,編譯出來的函數庫的大小也很大,即資源占用也很多。
3. 而嵌入式系統中,也需要C語言寫代碼實現特定功能,也需要用到C語言函數庫,但是由於嵌入式系統中,一般資源比較有限,所以不適合直接使用(太占用資源的)gLibc。
4. 所以有人就又(沒有參考glibc,而是從頭開始,)重新實現了一個用於嵌入式系統中的,代碼量不是很大的,資源占用相對較少的,C語言函數庫,叫做uClibc。並且,uClibc不支持MMU(內存管理單元)。
5. 而後來,glibc的開發者,又推出個Embedded glibc,簡稱eglibc,其主要目的也是將glibc用於嵌入式領域。

相應最大的改動就在於,把更多的庫函數,改為可配置的,這樣,如果你的嵌入式系統中不需要某些函數,就可以裁剪掉,不把該函數編譯到你的eglibc庫中,使得最終生成的eglibc庫的大小變小,最終符合你的嵌入式系統的要求(不能超過一定的大小),這樣,就實現了,把glibc引用於嵌入式系統中的目的了。

可以簡單的理解為:
glibc,uClibc,eglibc都是C語言函數庫:
1. uClibc是嵌入式系統中用的,glibc是桌面系統用的
2. eglibc也是嵌入式系統中用的,是glibc的嵌入式版本,和glibc在源碼和二進位上兼容。

posted by admin in Linux and have No Comments

Place your comment

Please fill your data and comment below.
Name
Email
Website
Your comment