您的位置:首页 > 运维架构 > Linux

Linux源码编译(一):从头文件说起

2013-09-17 09:36 253 查看
原文地址:http://blog.chinaunix.net/uid-26838492-id-3170998.html

在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结,但其中的每一个细节要点都值得花费很多时间去研究,比如X window架构,驱动模块,文件系统的实现等。对于细节,只能靠大家自己去沉淀和深究,本博客旨在从全局概念上让大家对Linux有更多的认知,系列文章讲完后,希望留给大家的感觉是:不再害怕Linux。

在这一节里,主要和大家理一理Linux下头文件方面的杂碎,从大的方向说,Linux下编程分为两块:

1). 内核开发

2). 用户空间程序开发



1. 内核空间头文件

对于 Linux kernel的程序开发,主要使用C语言,当然汇编语言也是举足轻重,Kernel的开发主要针对哪些方面呢?

1). 硬件驱动模块

2). 内核性能的增强

3). 内核的新功能、新特性

4). 内核bug的fix

......

无论是哪一方面的内核开发,使用的都是内核自身的头文件,而内核的头文件主要有两个目录位置:





当然,除了asm和 linux 这两个主要的头文件目录,还有诸如/usr/include/drm,/usr/include/video,/usr/include/sound等驱动相关的头文件目录。

总之,如果是从事内核开发的话,所有引用的头文件均是来自内核本身,绝不可能使用用户空间的头文件,比如"glibc",“libstdc++"等头文件的引用是不可能出现在内核程序中的。

2. 用户空间头文件

用户空间的头文件杂乱纷繁,随便一个应用程序,几乎都有自己维护的头文件,但尽管如此,有一些最基本、相对底层的头文件或库函数是开发应用程序的基础。

比如,如果想在用户空间编写C语言程序,那么使用的最基本的C库和头文件是由glibc提供的;想在用户空间编写C++程序,其使用的基本库和头文件又是来自于libstdc++。

对于glibc,不仅仅提供了标准的C库,如fopen(), fclose()等, 而且还提供了和内核空间打交道的相关库,如open(), close()等。

不管是glibc提供的C库,还是由libstdc++提供的C++库,想要编写GUI窗口程序,显然不太现实,于是,有了著名的基于C语言的GTK+库和基于C++语言的QT库,这些相对上层的库所做的事情就是为了方便编写GUI程序,对C和C++封装了一层。





除了上面这些编程相关的库或头文件,Linux环境中编程还有很多编程语言,比如Java,Python等。

3. 所谓跨平台

1). 跨平台一般分为:

跨硬件平台:比如Linux内核,即能在x86上运行,也能在ARM或Android上运行

跨系统平台:即能在Linux系统下运行,也能在Windows系统下运行,比如firefox

跨硬件跨系统:比如Java程序,可以在不同的体系结构,也可以在不同的系统平台运行

2). Window环境中重新编译,才能运行,其原理是使用标准库编写程序,从而实现跨平台:

glibc:Linux标准C库

libstdc++:Linux标准C++库

3). Windows环境中重新编译,才能运行,其原理是统一不同系统平台的链接库,从而实现跨平台:

GTK+:基于C语言的GUI库

Qt: 基于C++的GUI库

4). Windows环境中不需要重新编译,一次编译,到处运行:

Java,使用JVM虚拟机统一不同的链接库和不同的平台,从而实现跨平台。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: