LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3724|回复: 24

用最新版linux源码包编译内核时是否也要重新安装下Linux API Headers?

[复制链接]
发表于 2009-6-5 14:22:00 | 显示全部楼层 |阅读模式
在LFS中,总是能见到这么一个过程
6.7. Linux-2.6.27.4 API Headers

make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /usr/include


但是在一般的发行版如debian中编译内核时,并没有见着类似的安装Linux API Headers 的命令,难道在编译内核时不需要同步更新下Linux API Headers?
在编译其他软件时,有些要用到Linux API Headers,不同步更新不会有问题么?
发表于 2009-6-7 15:13:48 | 显示全部楼层
我也想知道答案,我编译内核,从2.6.16升级到2.6.28的时候,好像不同步头文件更新也能编译通过。
回复 支持 反对

使用道具 举报

发表于 2009-6-7 17:13:12 | 显示全部楼层
问题不大,只要内核版本大于头文件的安装版本一般问题不大。
回复 支持 反对

使用道具 举报

发表于 2009-6-7 23:02:34 | 显示全部楼层
我从来就不理头文件,一直到现在也好像没出现过问题。
回复 支持 反对

使用道具 举报

发表于 2009-6-8 13:12:50 | 显示全部楼层
简短的回答是,不用,且不能。
复杂一点的回答是,不需要,不过可以更新,更新内核头文件有必要更新整个工具链;要保证安全更新工具链,最简单的方法是重做系统。

等您建立起清晰的 "工具链、编译时、运行时" 概念时,您会明白怎么做,及为什么要那么做。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-8 20:20:01 | 显示全部楼层
在编译内核时make headers_install

apt-get install linux-libc-dev
效果是否一样?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-8 20:43:15 | 显示全部楼层
glibc是GNU C Library,是否也就是通常所说的C运行时库?
在编译这个库时,要用到内核中相关的函数,所以就必须内核头文件,也即Linux API Headers
又因为Linux系统是建立在C语言之上的,所以C运行时库即glibc非常重要而不可随意升级,因此所用的Linux API Headers也不可随意替换?

基于上面所说,系统的Linux API Headers必须跟编译系统的glibc时所用的Linux API Headers版本一致,是否是这样?还请大侠指正
回复 支持 反对

使用道具 举报

发表于 2009-6-13 07:52:59 | 显示全部楼层
引自 http://www.linuxfromscratch.org/ ... apter08/kernel.html

LFS 手册有这麽一段:
Warning

The headers in the system's include directory should always be the ones against which Glibc was compiled, that is, the sanitised headers from this Linux kernel tarball. Therefore, they should never be replaced by either the raw kernel headers or any other kernel sanitized headers.


即是说,你的 headers 应该跟编译 glibc 时所使用的要一致,因为这样才确保 glibc 能提供的跟你编译软件时被定义的才一致

不一致未必出问题,不出问题的原因是应用的函数未必被采用

所以要替换系统的 headers,首先应该重新编译安装 glibc,也就是重建 toolchain,不过编译安装 glibc 是极高危动作,请慎之!
回复 支持 反对

使用道具 举报

发表于 2009-6-13 07:54:32 | 显示全部楼层
Post by lofeng;1995587
在编译内核时make headers_install

apt-get install linux-libc-dev
效果是否一样?


Short answer:不一样
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-13 10:08:55 | 显示全部楼层
在编译内核时make headers_install

apt-get install linux-libc-dev

这个有点明白,linux-libc-dev貌似是debian提供的经过其净化的头文件包,而make headers_install安装的是内核中的头文件。
在debian中推荐用linux-libc-dev,但是在安装编译某些软件时,譬如vmware tool时,还是要求linux headers,不知是何故。
而debian中貌似是推荐用linux-libc-dev的,所以我只好先装上Linux headers,以装vmware tool,然后remove linux headers,最后再装上linux-libc-dev,这样不知可妥当?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表