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