uclibc和glibc的差别
?
有兩種常用的libc庫與uClinux的使用。 UC - libc和uClibc的。他們有很大的不同,盡管他們相似的名稱。下面是一個如何不同的快速概述。
UC - libc的是uClinux的原始庫。它是基于從Linux - 8086 C庫這是由杰夫迪翁和Kenneth Albanowski增加M68000支持ELKS項目的一部分來源。這是一個相當完整的libc實現,但是,API的一些有點不規范,不少常見的libc的程序不存在。目前,它已為M68000,的ColdFire和ARM(非MMU)架構穩定的支持。這是主要的設計目標是小,重量輕。它試圖以符合任何標準,雖然它的API試圖與大多數libcs??兼容,它并不總是完全一致。
uClibc的是一個旨在修復與UC - libc中的問題的uC - libc的衍生物。它使所有的API標準(正確的類型,ARGS等),填補了缺失的套路很多,而且已經被移植到很多的架構。一般情況下它試圖提供glibc的兼容性,從而確保移植到較小的uClibc的應用是很容易的。它可用于在標準虛擬機的Linux和uClinux。為了使它更加緊湊也可以作為與MMU支持埃里克安德森大多數平臺共享庫已經編譯uClibc的背后的驅動力,并已做了很多工作。 uClibc的支持的處理器大陣:M68000,的ColdFire,ARM,MIPS,V850,X86,1960,SPARC的SuperH,阿爾法,PowerPC和日立8。 uClibc的更容易適應新的架構和其不斷增長的平臺支持是證明了這一點
在uClinux的分布提供了一個環境,可以使用編譯或UC - libc或uClibc的根據您的需要。對于M68000和ColdFire平臺通常是更好的選擇的uC - libc的,因為它支持共享庫,并且是這些CPU最常用的libc。 uClibc的作品也相當好,幾乎全部由配送支持的平臺。你選擇哪種libc中的使用將決定您的要求。
?
uclibc和glibc的差別
?
uClibc和Glibc并不相同,兩者有許多不同之處,而且以下不同有可能給你帶來一些問題.
1.uClibc比Glibc小,雖然uClibc和Glibc在已有的接口上是兼容的,而且采用uClibc編譯應用程序比采用Glibc編譯應用程序要更方便,但是uClibc并沒有包括Glibc中的所有接口實現,因此有些應用可能在uClibc中不能編譯。
2.uClibc在可配置性上比Glibc要好。
3.uClibc并不能保證發布的庫二進制兼容舊版本uClibc庫。當一個新的版本uClibc庫被發布,則可能需要也可能不需要重新編譯應用程序。
4.在Glibc中調用malloc(0),將返回一個有效的指針,然而在uClibc中調用malloc(0),則返回NULL指針。根據在SuSv3中關于malloc(0)的行為的定義,兩個庫的實現都是正確的。對于調用relloc(NULL,0),兩個庫的實現也不同。個人感覺Glibc的如此實現不是特別安全。
??? Glibc中malloc的實現可以通過MALLOC_CHECK_ 環境變量調節。這個方法主要用于malloc調試。這些擴展的malloc調試特性在uClibc中是不可用的。在Linux上有許多有些的malloc調試功能的庫(如:dmalloc,electric fence,valgrind等)比Glibc中的擴展的malloc調試功能更好用。因此uClibc中去掉這些功能特性并不會有多打損失。
5.uClibc沒有提供用于數據接口的庫(libdb)。
6.uClibc不支持NSS(/lib/libnss_*),在這方面Glibc更容易支持不同方式的認證和DNS解析。uClibc僅僅支持采用flat口令文件或者shadow口令文件存儲授權信息。如果需要比這些更復雜的的授權,可以編譯安裝pam。
7.uClibc中的libresolv庫僅僅是一個樁。Glibc的libresolv庫中的部分并不是全部的功能uClibc都提供,許多函數都沒有實現。
8.提供網絡信息服務支持(NIS)libnsl庫(最初被稱為黃頁YP),被SUN擴展為發明為RPC并用于網絡共享Unix口令文件
。個人認為NIS是一個令人厭惡的東西并應該使用。因此,在實現相同的功能情況下采用ldap比NIS更有效。uClibc雖然提供一個樁libnsl,但并不支持NIS。我們因此也不提供在Glibc下提供的位于/usr/include/rpcsvc里的頭文件。
9.uClibc的區域支持并不是100%的完全。正在這方面努力
10.uClibc的數據功能函數庫內部僅僅支持long double,設置對于long double的支持也是非常有限。與此對應的只實現了較少的數學函數。如果應用程序采用double類型,則會程序會運行得較好。
11.uClibc的libcrpt庫不支持可重入crypt_r,setkey_r和encrypt_r,因為這些也不是SuSv3所規定的。
12.uClibc直接采用內核的數據類型去定義大多數透明的數據類型。
13.uClibc支持采用linux內核結構特有的結構體"struct stat"。
14.uClibc的運行時庫librt當前缺少aio接口、全部的時鐘接口和共享內存接口(僅僅實現定時器接口和消息隊列接口)?
總結
以上是生活随笔為你收集整理的uclibc和glibc的差别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浮点型大小比较
- 下一篇: linux下的各种系统错误errno描述