GCYYfun / DailySchedule

《日常》
18 stars 13 forks source link

关于一些syscall、libc、gcc、musl-gcc基础常识的问题? #2

Open GCYYfun opened 4 years ago

GCYYfun commented 4 years ago

周知OS有system call、作用是 由OS这个应用向依赖于它的上层软件提供 OS 所管辖的资源的操作能力、为了方便和统一 逐渐形成了 POSIX 标准、按照这个标准去制作syscall 、大家就都比较容易使用、但终归 写程序还是会有不方便、就又形成了一层抽象和封装 、用C包装起来了syscall、称之为 libc、提供成为库函数、去调用libc会比直接调用syscall 方便一些、

比如最开始有 ANSI C 就叫做了libc 、之后GUN也出了一个libc 、叫做了glibc、目前要用的 musl 也是同样的东西、不同的是具体的实现、但封装的都是基于POSIX标准的syscall、

有一些 问题:

  1. Ubuntu 有没有自带的libc、是glibc么?

缺省带glibc

  1. Ubuntu 下 我通过 man 手册 去查询 read 、read(2) 这是Ubuntu的实现的syscall么?

是linux实现的syscall

  1. 那么read(2) 所需的头文件 unistd.h 它是什么呢?syscall的头文件?

不是,是libc的部分函数声明的头文件

  1. gcc 是用来编译c的、它是需要libc的支持么?用的是glibc?、是否可以替换?

需要libc。缺省是glibc。可以替换。

  1. 如果是 选择不同的libc 、应该就无法编译了吧、毕竟库都不一样了、难道函数定义会一样么?

glibc是事实的标准,其他libc库会向它看齐,但会有微小区别。

  1. 那么musl-gcc 看 了介绍 说 approach for producing musl-targeting cross compilers
    什么叫做 以musl为目标的交叉编译器 呢?musl-targeting 指的是什么、musl-libc? cross compilers 这个交叉是什么意思?

把gcc编译程序依赖的glibc换成了musl-libc

cross compilers 可以理解为换了libc的gcc

chyyuu commented 4 years ago

uclibc,eglibc,glibc,Musl-libc之间的区别和联系

ANSI/ISO_C POSIX GLIBC WIN32 种种C标准的概念区分

glibc库详解及与POSIX,system V这些库之间关系的说明