日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發(fā)布時(shí)間:2025/3/15 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux源码编译(一):从头文件说起 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Linux源碼編譯(一):從頭文件說起 2013-04-10 14:37:24

分類: LINUX

在Linux體系結(jié)構(gòu)章節(jié)中,主要讓大家對(duì)Linux結(jié)構(gòu)層次有一定的了解,沒有過多的長(zhǎng)篇大論,力求簡(jiǎn)結(jié),但其中的每一個(gè)細(xì)節(jié)要點(diǎn)都值得花費(fèi)很多時(shí)間去研究,比如X window架構(gòu),驅(qū)動(dòng)模塊,文件系統(tǒng)的實(shí)現(xiàn)等。對(duì)于細(xì)節(jié),只能靠大家自己去沉淀和深究,本博客旨在從全局概念上讓大家對(duì)Linux有更多的認(rèn)知,系列文章講完后,希望留給大家的感覺是:不再害怕Linux。

在這一節(jié)里,主要和大家理一理Linux下頭文件方面的雜碎,從大的方向說,Linux下編程分為兩塊:
? 1). 內(nèi)核開發(fā)
? 2). 用戶空間程序開發(fā)

? 1. 內(nèi)核空間頭文件
對(duì)于 Linux kernel的程序開發(fā),主要使用C語言,當(dāng)然匯編語言也是舉足輕重,Kernel的開發(fā)主要針對(duì)哪些方面呢?
? 1). 硬件驅(qū)動(dòng)模塊
? 2). 內(nèi)核性能的增強(qiáng)
? 3). 內(nèi)核的新功能、新特性
? 4). 內(nèi)核bug的fix
? ......

無論是哪一方面的內(nèi)核開發(fā),使用的都是內(nèi)核自身的頭文件,而內(nèi)核的頭文件主要有兩個(gè)目錄位置:


當(dāng)然,除了asm和 linux 這兩個(gè)主要的頭文件目錄,還有諸如/usr/include/drm,/usr/include/video,/usr/include/sound等驅(qū)動(dòng)相關(guān)的頭文件目錄。

總之,如果是從事內(nèi)核開發(fā)的話,所有引用的頭文件均是來自內(nèi)核本身,絕不可能使用用戶空間的頭文件,比如"glibc",“l(fā)ibstdc++"等頭文件的引用是不可能出現(xiàn)在內(nèi)核程序中的。


2. 用戶空間頭文件
用戶空間的頭文件雜亂紛繁,隨便一個(gè)應(yīng)用程序,幾乎都有自己維護(hù)的頭文件,但盡管如此,有一些最基本、相對(duì)底層的頭文件或庫(kù)函數(shù)是開發(fā)應(yīng)用程序的基礎(chǔ)。

比如,如果想在用戶空間編寫C語言程序,那么使用的最基本的C庫(kù)和頭文件是由glibc提供的;想在用戶空間編寫C++程序,其使用的基本庫(kù)和頭文件又是來自于libstdc++。

對(duì)于glibc,不僅僅提供了標(biāo)準(zhǔn)的C庫(kù),如fopen(), fclose()等, 而且還提供了和內(nèi)核空間打交道的相關(guān)庫(kù),如open(), close()等。

不管是glibc提供的C庫(kù),還是由libstdc++提供的C++庫(kù),想要編寫GUI窗口程序,顯然不太現(xiàn)實(shí),于是,有了著名的基于C語言的GTK+庫(kù)和基于C++語言的QT庫(kù),這些相對(duì)上層的庫(kù)所做的事情就是為了方便編寫GUI程序,對(duì)C和C++封裝了一層。



除了上面這些編程相關(guān)的庫(kù)或頭文件,Linux環(huán)境中編程還有很多編程語言,比如Java,Python等。


3. 所謂跨平臺(tái)
?1). 跨平臺(tái)一般分為:
????? 跨硬件平臺(tái):比如Linux內(nèi)核,即能在x86上運(yùn)行,也能在ARM或Android上運(yùn)行
????? 跨系統(tǒng)平臺(tái):即能在Linux系統(tǒng)下運(yùn)行,也能在Windows系統(tǒng)下運(yùn)行,比如firefox
????? 跨硬件跨系統(tǒng):比如Java程序,可以在不同的體系結(jié)構(gòu),也可以在不同的系統(tǒng)平臺(tái)運(yùn)行

?2). Window環(huán)境中重新編譯,才能運(yùn)行,其原理是使用標(biāo)準(zhǔn)庫(kù)編寫程序,從而實(shí)現(xiàn)跨平臺(tái):
????? glibc:Linux標(biāo)準(zhǔn)C庫(kù)
????? libstdc++:Linux標(biāo)準(zhǔn)C++庫(kù)

?3). Windows環(huán)境中重新編譯,才能運(yùn)行,其原理是統(tǒng)一不同系統(tǒng)平臺(tái)的鏈接庫(kù),從而實(shí)現(xiàn)跨平臺(tái):
????? GTK+:基于C語言的GUI庫(kù)
????? Qt: 基于C++的GUI庫(kù)

?4). Windows環(huán)境中不需要重新編譯,一次編譯,到處運(yùn)行:
????? Java,使用JVM虛擬機(jī)統(tǒng)一不同的鏈接庫(kù)和不同的平臺(tái),從而實(shí)現(xiàn)跨平臺(tái)。

總結(jié)

以上是生活随笔為你收集整理的Linux源码编译(一):从头文件说起的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。