|
|
|
|
| glibc newlib高手多指点,希望对我和以后的新手又帮助 |
 glibc newlib高手多指点,希望对我和以后的新手又帮助 - want_king [ 2006-03-19 20:02 | 940 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - EricFisher [ 2006-03-19 22:56 | 1,096 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - djcom [ 2006-03-22 19:56 | 1,869 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - EricFisher [ 2006-03-23 09:19 | 574 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - want_king [ 2006-04-24 23:40 | 673 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - faif [ 2006-04-27 07:04 | 812 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - helllworld [ 2006-04-27 09:35 | 318 byte(s)]
 Re: glibc newlib高手多指点,希望对我和以后的新手又帮助 - zhuzj [ 2006-05-12 11:08 | 134 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
除了内核以外,所有的程序都要或多或少的调用一些已有内核支持的标准函数;
glibc就是编译gcc要调用的标准C函数的库;
只是gcc要用的还是所有的标准函数没有研究过,有知道的请给个答案;
(因为版权的问题,很多标准C函数都是linus和后来的开发者开发的;我个人认为类似标准输出输入函数,因为和操作系统内核关系紧密,必然每个操作系统内核提供的不一样的实现方法,这部分不存在版权问题;版权问题主要集中在例如math这类函数,linus等主要针对这部分标准C函数进行重新构造,与标准输出输入等形成开源标准C函数库,即G libc;)
g++ 和libstdC++关系也类似gcc和glibc的关系;
目前出现了 newlib,是编译针对嵌入式系统开发的gcc的调用函数库;
和glibc有什么具体或者大概区别也请大家给点提示;
因为编译gcc一般都是在计算机内完成,编译gcc的环境一样,不论是针对计算机系统还是嵌入式系统,都可以调用glibc的函数;那么newlib存在的意义何在?难道它可以限定gcc的优化?
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
>除了内核以外,所有的程序都要或多或少的调用一些已有内核支持的标准函数;
>glibc就是编译gcc要调用的标准C函数的库;
单纯的编译gcc时,不需要glibc。
>目前出现了 newlib,是编译针对嵌入式系统开发的gcc的调用函数库;
>和glibc有什么具体或者大概区别也请大家给点提示;
newlib的信息可以参见网站 http://sourceware.org/newlib/
glibc主要针对于GNU/Linux的目标平台,底层实现和linux操作系统联系紧密。
newlib主要针对于嵌入式平台(特别是无操作系统的),相对比较精简,容易移植。
>因为编译gcc一般都是在计算机内完成,编译gcc的环境一样,不论是针对计算机系统还是嵌入式系统,都
>可以调用glibc的函数;那么newlib存在的意义何在?难道它可以限定gcc的优化?
编译交叉编译器cross gcc时,确实是需要在本地机器上完成。但是,如果交叉编译器所运行的目标机器是一个无操作系统内核的嵌入式平台,那么就应该使用newlib,比如mips-elf。如果目标机器也是GNU/Linux的,那么就应该用glibc,比如mips-linux。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
Eric的回答有些不解之处。
>>除了内核以外,所有的程序都要或多或少的调用一些已有内核支持的标准函数;
>>glibc就是编译gcc要调用的标准C函数的库;
>单纯的编译gcc时,不需要glibc。
应该是boottrap gcc时不需要glibc把。
以前的configure --with-newlib就是干这个的
在用bootstrap gcc交叉编译glibc后,可以
再编译一道gcc, 建立完整编译器。
>>目前出现了 newlib,是编译针对嵌入式系统开发的gcc的调用函数库;
>>和glibc有什么具体或者大概区别也请大家给点提示;
>newlib的信息可以参见网站 http://sourceware.org/newlib/
>glibc主要针对于GNU/Linux的目标平台,底层实现和linux操作系统联系紧密。
>newlib主要针对于嵌入式平台(特别是无操作系统的),相对比较精简,容易移植。
>>因为编译gcc一般都是在计算机内完成,编译gcc的环境一样,不论是针对计算机系统还是嵌入式系统,都
>>可以调用glibc的函数;那么newlib存在的意义何在?难道它可以限定gcc的优化?
>>编译交叉编译器cross gcc时,确实是需要在本地机器上完成。但是,如果交叉编译器所运行的目标机器是一个
>无操作系统内核的嵌入式平台,那么就应该使用newlib,比如 mips-elf。如果目标机器也是GNU/Linux的,
>那么就应该用glibc,比如mips-linux
mips-linux/mips-elf主要看一些具体配置头文件之类,
可以参看tm-elf.h, tm-linux.h的区别。
从名字来说,大体说来,mips-linux的范围要精细过mips-elf.
mips-linux指名了linux os,这种os缺省支持elf
mips-elf则没有指名,
以前的uclinux toolchain有可能使用mips-elf-gcc ,然后elf2flt转化为
flat格式的可执行文件
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
>应该是boottrap gcc时不需要glibc把。
>以前的configure --with-newlib就是干这个的
>在用bootstrap gcc交叉编译glibc后,可以
>再编译一道gcc, 建立完整编译器。
有点这个意思:-)
但是,gcc的文档中介绍的交叉编译器是没有bootstrap的。参见http://gcc.gnu.org/install/build.html
在这一点,我也有点搞不清。有些文档上介绍,先用--with-newlib --without-headers来编译第一遍交叉
gcc,然后用这个交叉gcc来编译newlib,或者glibc。最后,再结合编译好的newlib或glibc来编译最终的
交叉gcc。
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
今天又想了一下,
1)首先glibc和newlib都是函数库
2)glibc 是liunx平台应用软件开发函数库,许多函数都是针对linux操作系统体系结构设计的。如文件系统的访问(例open( ) )都是调用linux的系统函数。可以说glibc不区分目标机,而是由linux进行区分。
而newlib是嵌入式开发的函数库,是一个简化的glibc。所涉及的系统调用是根据不同目标机分别完成。可以说是可以不通过操作系统直接进行操作。
3)可以说glibc的系统函数是通过操作系统系统函数再到具体操作;而newlib是直接操作。
举例:对串口2进行写。
glibc函数 要通过open( )获得串口2的inode,在调用write( ), 通过文件系统分析,在进行具体操作。
newlib函数 直接调用write( ),通过内置汇编 直接操作。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
说说我的看法:
1首先glibc和newlib都是函数库
是的没问题,但是glibc或者newlib可以说都是平台无关,也可以说是平台相关的。就是说在各种平台上都有,还不支持的平台就需要移植。
glibc在Solaris等机器上有,windows上也有port。
2,可以说glibc的系统函数是通过操作系统系统函数再到具体操作;而newlib是直接操作。
举例:对串口2进行写。
glibc函数 要通过open( )获得串口2的inode,在调用write( ), 通过文件系统分析,在进行具体操作。
newlib函数 直接调用write( ),通过内置汇编 直接操作。
你说的有道理,这样就证明了newlib移植方便了。我以前也见过ANSI C在其他嵌入CPU上的移植,例如用printf,在链接串口超级终端打印,printf本身是平台无关的,调用底层的一个基本的IO输出函数,只要把这个函数针对不同的CPU改写一下就可以了。所以说这些库的实现都是80%平台无关的
|
|
|
----
Free As In Freedom
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
看了一下newlib的手册,不明白为什么math库单独拿出来。
Red Hat newlib C Library Documentation
Red Hat newlib C Math Library Documentation
newlib函数 直接调用write( ),通过内置汇编 直接操作。
有一些不解,既然是无os嵌入式平台,还有write系统调用吗?感觉就是用汇编指令直接操作。
|
|
----
好好学习 天天向上 不再灌水
|
|
[Original]
[Print]
[Top]
|
|
|