Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291691
  • 博文数量: 47
  • 博客积分: 568
  • 博客等级: 下士
  • 技术积分: 543
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-05 12:51
文章分类

全部博文(47)

文章存档

2012年(47)

分类:

2012-04-13 13:14:02

在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虚拟机统一不同的链接库和不同的平台,从而实现跨平台。

阅读(920) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~