理清gcc、libc、libstdc++的关系

libc

  • libc是Linux下原来的标准C库,也就是当初写hello world时包含的头文件#include <stdio.h> 定义的地方。

  • 后来逐渐被glibc取代,也就是传说中的GNU C Library

  • 主流的一些linux操作系统如 Debian, Ubuntu,Redhat等用的都是glibc(或者其变种,下面会说到).

glibc

  • glibc是Linux系统中最底层的API,几乎其它任何的运行库都要依赖glibc

  • glibc最主要的功能就是对系统调用的封装

  • 除了封装系统调用,glibc自身也提供了一些上层应用函数必要的功能,如string,malloc,stdlib,linuxthreads,locale,signal等等。

eglibc

  • 就是前面说到的变种glibc

  • e是Embedded的意思

  • eglibc的主要特性是为了更好的支持嵌入式架构,可以支持不同的shell(包括嵌入式),但它是二进制兼容glibc的,就是说如果你的代码之前依赖eglibc库,那么换成glibc后也不需要重新编译。

  • ubuntu系统用的就是eglibc

glib

  • glib跟glibc 并没有关系

  • glib也是个c程序库,不过比较轻量级

  • glib将C语言中的数据类型统一封装成自己的数据类型,提供了C语言常用的数据结构的定义以及处理函数,有趣的宏以及可移植的封装等

    • (注:glib是可移植的,说明你可以在linux下,也可以在windows下使用它)

libc++/libstdc++

  • 如果你写的是C++代码,这两个库也要非常重视

  • 两个都是C++标准库

  • libc++是针对clang编译器特别重写的C++标准库

  • libstdc++自然就是gcc的事儿了

  • libstdc++与gcc的关系就像clang与libc++

libstdc++,glibc的关系

  • libstdc++与gcc是捆绑在一起的,也就是说安装gcc的时候会把libstdc++装上。

  • 那为什么glibc和gcc没有捆绑在一起呢?

  • 相比glibc,libstdc++虽然提供了c++程序的标准库,但它并不与内核打交道。对于系统级别的事件,libstdc++首先是会与glibc交互,才能和内核通信。

  • 相比glibc来说,libstdc++就显得没那么基础了。

g++是做什么的?

  • 不要以为gcc只能编译C代码,g++只能编译c++代码

  • 后缀为.c的

    • gcc把它当作是C程序

    • g++当作是c++程序;

  • 后缀为.cpp的

    • 两者都会认为是c++程序

  • 编译

    • 在编译阶段,g++会调用gcc,对于c++代码,两者是等价的

  • 链接

    • 需要这样,gcc -lstdc++

    • 如果你的Makefile文件并没有手动加上libstdc++库,一般就会提示错误,要求你安装g++编译器了

    • gcc命令不能自动和C++程序使用的库链接

    • g++ 能自动链接库

————————————————————

BY:HW-WB

华为开发者论坛

https://blog.csdn.net/qq_41854911/article/details/122017552
https://blog.csdn.net/qq_35987777/article/details/106712070

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值