c函数定义的格式是K&R 函数原型声明( 二 )


二. uClibc
uClibc 是一个面向嵌入式Linux系统的小型的C标准库 。最初uClibc是为了支持uClinux而开发 。这是一个不需要内存管理单元的Linux版本 。因此适合于微控制器系统(uCs;此处”u”是代表”micro”的μ的罗马化).[2]
uClibc比一般用于Linux发行版的C库GNU C Library (glibc)要小得多 。glibc目标是要支持最大范围的硬件和内核平台的所有C标准 。而uClibc专注于嵌入式Linux.很多功能可以根据空间需求进行取舍 。
uClibc运行于标准的以及无MMU的Linux系统上 。支持tile, i386 。x86 64 。ARM (big/little endian), AVR32 。Blackfin 。h8300 。m68k 。MIPS (big/little endian), PowerPC 。SuperH (big/little endian), SPARC 。和v850等处理器 。
uClibc和Glibc并不相同 。两者有许多不同之处 。而且以下不同有可能给你带来一些问题.
1.uClibc比Glibc小 。虽然uClibc和Glibc在已有的接口上是兼容的 。而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便 。但是uClibc并没有包括Glibc中的所有接口实现 。因此有些应用可能在uClibc中不能编译 。
2.uClibc在可配置性上比Glibc要好 。
3.uClibc并不能保证发布的库二进制兼容旧版本uClibc库 。当一个新的版本uClibc库被发布 。则可能需要也可能不需要重新编译应用程序 。
【c函数定义的格式是K&R 函数原型声明】4.uClibc没有提供用于数据接口的库(libdb) 。
5.uClibc不支持NSS(/lib/libnss_*) 。在这方面Glibc更容易支持不同方式的认证和DNS解析 。uClibc仅仅支持采用flat口令文件或者shadow口令文件存储授权信息 。如果需要比这些更复杂的的授权 。可以编译安装pam 。
6.uClibc中的libresolv库仅仅是一个桩 。Glibc的libresolv库中的部分并不是全部的功能uClibc都提供 。许多函数都没有实现 。
7.提供网络信息服务支持(NIS)libnsl库(最初被称为黄页YP) 。被SUN扩展为发明为RPC并用于网络共享Unix口令文件
。个人认为NIS是一个令人厌恶的东西并应该使用 。因此 。在实现相同的功能情况下采用ldap比NIS更有效 。uClibc虽然提供一个桩libnsl 。但并不支持NIS 。我们因此也不提供在Glibc下提供的位于/usr/include/rpcsvc里的头文件 。
8.uClibc的区域支持并不是100%的完全 。正在这方面努力
9.uClibc的数据功能函数库内部仅仅支持long double 。设置对于long double的支持也是非常有限 。与此对应的只实现了较少的数学函数 。如果应用程序采用double类型 。则会程序会运行得较好 。
10.uClibc的libcrpt库不支持可重入crypt_r,setkey_r和encrypt_r 。因为这些也不是SuSv3所规定的 。
11.uClibc直接采用内核的数据类型去定义大多数透明的数据类型 。
12.uClibc支持采用linux内核结构特有的结构体”struct stat” 。
13.uClibc的运行时库librt当前缺少aio接口、全部的时钟接口和共享内存接口(仅仅实现定时器接口和消息队列接口)
三. newlib
Newlib是一个面向嵌入式系统的C运行库 。最初是由Cygnus Solutions收集组装的一个源代码集合 。取名为newlib 。现在由Red Hat维护 。
对于与GNU兼容的嵌入式C运行库 。Newlib并不是唯一的选择 。但是newlib是比较优秀和成熟度比较高的一个 。newlib具有独特的体系结构 。使得它能够非常好地满足深度嵌入式系统的要求 。newlib可移植性强 。具有可重入特性、功能完备等特点 。已广泛应用于各种嵌入式系统中 。
newlib 是一个用于嵌入式系统的开放源代码的C语言程序库 。由libc和libm两个库组成 。特点是轻量级 。速度快 。可移植到很多cpu结构上 。newlib实现了许多复杂的功能 。包括字符串支持 。浮点运算 。内存分配(如malloc)和I/O流函数(printf 。fprinf()等) 。其中libc提供了c 语言库的实现 。而libm提供了浮点运算支持 。
在使用gcc编译器时 。对gcc指定不同的配置选项时 。使用的C语言库就不同 。默认情况是下使用glibc 。可以通过–with-newlib选择使用newlib.

推荐阅读