Linux工具鏈

Linux工具鏈通常來源于GNU project或Clang/LLVM project尸折。其中LLVM使用BSD license订咸,而GNU使用GPL license。

一個(gè)標(biāo)準(zhǔn)的GNU工具鏈包括三個(gè)部分:

  • Binutils:二進(jìn)制工具包括assembler和linker歼捏。
  • GCC:編譯器处嫌。
  • C庫(kù)(run-time libraries):基于POSIX的標(biāo)準(zhǔn)化API。

GNU工具鏈的前綴通常由四部分組成:

  • CPU架構(gòu):CPU架構(gòu)和大小端偎球,如MIPS小端是mipsel洒扎,ARM大端是armeb。
  • 供應(yīng)商:buildroot衰絮,poky袍冷,none,unknown等猫牡。
  • 內(nèi)核:linux(對(duì)于我們來說胡诗,這項(xiàng)一定是linux)。
  • 操作系統(tǒng):用戶態(tài)組件的名字淌友,如gnu或musl煌恢。還有ABI(Application Binary Interface)和浮點(diǎn)支持。所以常見有g(shù)nueabi震庭,gnueabihf瑰抵,musleabi,musleabihf等器联。


    GNU工具鏈前綴.png

C庫(kù)的種類:

  • glibc:標(biāo)準(zhǔn)的GNU C庫(kù)二汛。非常大,但它是最完整的POSIX API實(shí)現(xiàn)拨拓。
  • musl libc:輕小肴颊,對(duì)于RAM和存儲(chǔ)有限的系統(tǒng)來說是一個(gè)非常好的選擇。
  • uClibc-ng:微控制器的C庫(kù)千元,早期用于uClinux苫昌。
  • eglibc:glibc的一個(gè)分支,適用于嵌入式應(yīng)用幸海。

使用crosstool-NG(https://github.com/crosstool-ng/crosstool-ng)可以編譯出交叉編譯工具鏈

  • 安裝crosstool-NG
git clone https://github.com/crosstool-ng/crosstool-ng/crosstool-ng.git
cd crosstool-ng
git checkout crosstool-ng-1.24.0
./bootstrap
./configure --enable-local
make
make install
  • 查看工具鏈信息
./ct-ng show-arm-unknown-linux-gnueabi
  • 編譯工具鏈
./ct-ng arm-unknown-linux-gnueabi
./ct-ng build

C庫(kù)的組成

  • libc:最常用的POSIX函數(shù)祟身,如printf,open物独,close袜硫,read,write等挡篓。
  • libm:數(shù)學(xué)函數(shù)婉陷,如cos帚称,exp,log秽澳。
  • libpthread:所有的POSIX線程函數(shù)闯睹,它們會(huì)以pthread_開頭。
  • librt:POSIX的real-time擴(kuò)展担神,包括shared memory和asynchronous I/O楼吃。

C庫(kù)的使用
除了libc,其它都需要在使用時(shí)用-l指明妄讯,如使用libm

arm-unknown-linux-gnueabi-gcc myapp.c -o myapp -lm

使用readelf可以驗(yàn)證myapp使用了libm

 arm-unknown-linux-gnueabi-readelf -a myapp

在平常的程序編譯過程中孩锡,除了Linux工具鏈,我們還需要一份Linux內(nèi)核頭文件亥贸,因?yàn)槠渲邪囊恍┒x和常量是訪問內(nèi)核時(shí)所必須的躬窜。我們需要它來編譯C庫(kù),也需要它來編譯一些和設(shè)備打交道的程序和庫(kù)炕置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荣挨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子讹俊,更是在濱河造成了極大的恐慌垦沉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仍劈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡寡壮,警方通過查閱死者的電腦和手機(jī)贩疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來况既,“玉大人这溅,你說我怎么就攤上這事“羧裕” “怎么了悲靴?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)莫其。 經(jīng)常有香客問我癞尚,道長(zhǎng),這世上最難降的妖魔是什么乱陡? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任浇揩,我火速辦了婚禮,結(jié)果婚禮上憨颠,老公的妹妹穿的比我還像新娘胳徽。我一直安慰自己积锅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布养盗。 她就那樣靜靜地躺著缚陷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪往核。 梳的紋絲不亂的頭發(fā)上蹬跃,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音铆铆,去河邊找鬼蝶缀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛薄货,可吹牛的內(nèi)容都是我干的翁都。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼谅猾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柄慰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起税娜,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坐搔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后敬矩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體概行,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年弧岳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凳忙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禽炬,死狀恐怖涧卵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腹尖,我是刑警寧澤柳恐,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站热幔,受9級(jí)特大地震影響乐设,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜断凶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一伤提、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧认烁,春花似錦肿男、人聲如沸介汹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘹承。三九已至,卻和暖如春如庭,著一層夾襖步出監(jiān)牢的瞬間叹卷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工坪它, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骤竹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓往毡,卻偏偏與公主長(zhǎng)得像蒙揣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子开瞭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348