在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虚拟机统一不同的链接库和不同的平台,从而实现跨平台。
阅读(913) | 评论(0) | 转发(0) |