Linux源码编译(一):从头文件说起
生活随笔
收集整理的這篇文章主要介紹了
Linux源码编译(一):从头文件说起
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux源碼編譯(一):從頭文件說起
2013-04-10 14:37:24
在這一節里,主要和大家理一理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虛擬機統一不同的鏈接庫和不同的平臺,從而實現跨平臺。
分類: LINUX
在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虛擬機統一不同的鏈接庫和不同的平臺,從而實現跨平臺。
總結
以上是生活随笔為你收集整理的Linux源码编译(一):从头文件说起的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反距离权重加权插值的理解及Python实
- 下一篇: 这篇Nature子刊文章的蛋白组学数据P