关于内核/应用程序 编译 所用到的头文件和库

这问题一直有点不清楚 .
1)按我的理解,内核 和 应用程序 进行编译时,,都可以用glibc库 或者 也可以用标准库,之所以用glibc库多一些,只是因为 内核本身程序 是用gnu c写的,兼容性会比标准库(ansi c库)好些?
2)所以在glibc库中,其实包含了 内核所用到的系统调用 ,以及封闭好的,供应用程序所用的api接口,但初安装linux系统 后,只是安装 了header 头文件,这个头文件就只把glibc库中的api接口部分列了出来,以供编译其他 的应用程序 使用.
3)所以我们如果要编译内核模块 或者  新版本内核 时,就需要另外安装 内核头文件(一般在include/linux下),这样相当于把glibc中的系统调用 开放给 需要编译的程序使用.

请教下以上认识,是否有问题?如果有问题,那么正确的理解 是什么?\

 

内核编译,实际上很少用标准c库吧?现在基本上都是用的glibc库.理论上用c库,也行.只是理论上.
我们在编译内核 的时候,可是 用的一样的gcc,一样的glibc..只是所用的头文件有所改动...需要把路径指向 include/linux目录下.
所以,实际 用到的lib还是gnc的lib,只是有些内核专用的系统调用 接口,需要专门的这个目录的头文件 来 外释 出来...对吧?

 

首先你要明白 库,运行时库,程序 之间的关系。

你做开发的时候,别人因为某种不想给你源码,就给你一些头文件,和库文件。
头文件中包含了接口的声明,从而你引用了头文件就可以使用接口
库中包含了接口的定位,这样你的编写的代码在编译链接时,编译器可以正确的找到函数实现并生成二进制。
从这种角度上来讲:

驱动编程:内核头文件和你本地运行的内核,就构成了你编写驱动的环境。
应用编程:以glibc库为例,系统中只提供了glibc的头文件和库,这样你就可以正常编写和运行你的应用。

当然还有一种开发方式,你就是库的作者,你有源码,你可以直接把你的应用跟库的源码写在一起,编译,运行。

下面说你问题:
1)按我的理解,内核 和 应用程序 进行编译时,,都可以用glibc库 或者 也可以用标准库,之所以用glibc库多一些,只是因为 内核本身程序 是用gnu c写的,兼容性会比标准库(ansi c库)好些?
首先内核是肯定不可能依赖于任何C库或者其他运行库的,即使需要一些简单的函数,比如字符串处理,math库什么的,都会自己实现。因为内核是你程序运行的基石,他需要提供你C库运行的环境(进程调度,内存管理,程序加载等等),如果你的内核还依赖C库,那将是一个死循环。(内核运行需要C库,可是系统启动的时候,C库的环境都没有。那内核永远无法启动。)
应用程序,你可以随意选择标准库,你可以选择glibc,你也可以选择其他C库。

2)所以在glibc库中,其实包含了 内核所用到的系统调用 ,以及封闭好的,供应用程序所用的api接口,但初安装linux系统 后,只是安装 了header 头文件,这个头文件就只把glibc库中的api接口部分列了出来,以供编译其他 的应用程序 使用.

glibc库封装了系统调用,glibc是跨平台的库,他封装了linux(posix)的系统调用和window的系统调用。封装成C库标准里面的函数。
C标准库只是一套标准。任何人可以用自己的方法实现,只要你符合标准。你能保证程序按照预期的方式运行即可。
头文件和库构成了你编写程序的基石,告诉编译器你使用的变量或者函数,是叫什么(头文件),什么样子(库),运行时库则为你的程序运行提供环境,加载系统环境变量,程序参数,然后从main函数开始加载,然后运行等等。

3)所以我们如果要编译内核模块 或者  新版本内核 时,就需要另外安装 内核头文件(一般在include/linux下),这样相当于把glibc中的系统调用 开放给 需要编译的程序使用

内核编程, 驱动编程,用户态编程 是不一样的。但是仅仅是使用的库和头文件不同。
驱动编程,使用的头文件就是内核kernel-header,库就是你本地的内核,或者你(交叉编译)构建的内核镜像。运行时库就是你本地运行的内核
用户态变成,使用的头文件是用户态的头文件和库文件。
内核编程,就相当于你有内核的源码,你想在里面自己搞点啥。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值