閱讀171 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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接口、全部的時鍾接口和共享內存接口(僅僅實現定時器接口和消息隊列接口)

最後更新:2017-04-03 16:49:02

  上一篇:go 知識共享圖文直播---(一)將數據庫中的數據加載到MSFlexGrid控件中再導入Excel
  下一篇:go 常見 mysql innodb 表錯誤