- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【【LLiinnuuxx】】理理清清ggcccc、、gglliibbcc、、lliibbssttddcc++++的的关关系系
当你在Linux下写C/C++代码的时 ,是不是会遇到许多编译链接的问题?
时不时报个glibc,gcc,g++等相关的错误, 很多时 都⽆从下⼿,⽽且⽐较混乱, 这也是编译链接过程中经常出现的问题。
这篇⽂章不是去介绍如何编译链接,⽽是理清编译链接过程中碰到的⼀些概念和出现的问题。尤其是
libc,glib,glibc,eglibc,libc++,libstdc++,gcc,g++。
从从 lliibbcc说说起起 。。
libc是Linux下原来的标准C库,也就是当初写hello world时包含的头⽂件#include stdio.h 定义的地⽅,后来逐渐被glibc取代,也就是传说
中的GNU C Library,在此之前除了有libc,还有klibc,uclibc。现在只要知道⽤的最多的是glibc就⾏了,主流的⼀些linux操作系统如 Debian,
Ubuntu,Redhat等⽤的都是glibc或者其变种,下⾯会说到。
那那gglliibbcc都都做做 了了些些什什么么呢呢??
glibc是Linux系统中最底层的API,⼏乎其它任何的运⾏库都要依赖glibc。
glibc最主要的功能就是对系统调⽤的封装,你想想看,你怎么能在C代码中直接⽤fopen函数就能打开⽂件? 打开⽂件最终还是要触发系统中的
sys_open系统调⽤,⽽这中间的处理过程都是glibc来完成的。这篇⽂章详细介绍了glibc是如何与上层应⽤程序和系统调⽤交互的。除了封装系
统调⽤,glibc ⾃⾝也提供了⼀些上层应⽤函数必要的功能,如string,malloc,stdlib,linuxthreads,locale,signal等等。
那那eegglliibbcc⼜⼜是是什什么么??
这⾥的e是Embedded的意思,也就是前⾯说到的变种glibc。
eglibc的主要特性是为了更好的⽀持嵌⼊式架构,可以⽀持不同的shell(包括嵌⼊式),但它是⼆进制兼容glibc的,就是说如果你的代码之前依赖
eglibc库,那么换成glibc后也不需要重新编译。ubuntu系统⽤的就是eglibc (⽽不是glibc),不信,你执⾏ ldd –version 或者 /lib/i386-linux-
gnu/libc.so.6(64位系统运⾏/lib/x86_64-linux-gnu)看看,便会显⽰你系统中eglibc/glibc的版本信息。这⾥提到了libc.so.6,这个⽂件就是
eglibc/glibc编译后的⽣成库⽂件。
⼀⼀个个gglliibb看看起起来来也也很很相相似似 ,,那那它它⼜⼜是是什什么么呢呢??
glib也是个c程序库,不过⽐较轻量级,glib将C语⾔中的数据类型统⼀封装成 ⾃⼰的数据类型,提供了C语⾔常⽤的数据结构的定义以及处理函
数,有趣的宏以及可移植的封装等(注 :glib是可移植的,说明你可以在linux下,也可以在windows下使⽤它)。
那那它它跟跟gglliibbcc有有什什么么关关系系吗吗??
其实并没有,除⾮你的程序代码会⽤到glib库中的数据结构或者函数,glib库在ubuntu系统中并不会默认安装(可以通过apt-get install
libglib2.0-dev⼿动安装),著名的GTK+和Gnome底层⽤的都是glib库。
想更详细地了解glib? 可以参考 GLib Reference Manual
GLib 为 C 语⾔编写的库和程序提供了核⼼应⽤程序组件。它提供了 GNOME 中使⽤的核⼼对象系统, main 循环的实现以及操作字符串和常⽤
数据结构的⼀整套⼯具函数。
看到这⾥,你应该知道这些库有多重要了吧?
你你写写的的CC代代码码在在编编译译的的过过程程 中中有有可可能能出出现现明明明明是是这这些些库库⾥⾥⾯⾯定定义义的的变变,,却却量量还还会会出出现现’’UUnnddeeffiinneedd’’,, ‘‘UUnnrreeffeerreennccee’’等等错错误误,,这这时时
你你可可能能会会怀怀疑疑是是不不是是这这些些库库 出出问问题题 了了?? 是是不不是是该该动动⼿⼿换换个个ggiillbbcc//eegglliibbcc了了?? 这这⾥⾥强强调调⼀⼀点点,,在在你你准准备备更更换换//升升级级这这些些库库之之前前,,你你应应该该好好
好好思思考考⼀⼀下下,,你你真真的的要要更更换换//升升级
文档评论(0)