青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

runsisi

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  45 隨筆 :: 15 文章 :: 26 評論 :: 0 Trackbacks

盡管是老生常談,但是在比較之前,還是先明確一下什么叫做工具鏈。

LFS/CLFS工具鏈是一套用于從C/C++源代碼生成可執行文件的軟件組件適當地組合在一起形成的系統。它包括4大部分,缺一不可:

1、一套頭文件,包含了這些源代碼所需要訪問的系統接口。

2、binutils,包含一些處理二進制可執行文件所需的工具,如匯編器、連接器等等。

3、gcc,包含了編譯C/C++源代碼所需的工具,并且還能自動調用相關的binutils工具來完成生成源代碼的工具

4、glibc,包含了系統接口的具體實現。

在上面的定義中,請注意這些軟件必須適當地組合,才能形成完整的工具鏈。那么怎么才算適當組合呢?當然,這個工具鏈必須能夠發揮作用,也就是確實能夠編譯出目標代碼,然后才能算適當組合。

那么,一個適當組合的工具鏈應當具有什么特點呢?一般我們把工具鏈運行的機器稱為host,所產生的代碼稱為target。那么對于工具鏈的要求便是:它必須要能在host上運行,所產生的代碼必須能在target上運行。再進一步分析:

1、頭文件:必須是針對target的,因為使用這個工具鏈編譯的源代碼需要訪問的系統接口是trget上的。

2、binutils:必須能在host上運行,然而產生target的代碼。

3、gcc:和binutils一樣。不過這里要注意的是,gcc自身帶有一個庫,稱為libgcc,它必須是target上的代碼。

4、glibc:必須是target上的代碼。

有了這些基本認識,讓我們來看一看一些實際的工具鏈構造過程。

LFS工具鏈構造順序:binutils p1->gcc p1->頭文件->glibc->adjust->gcc p2->binutils p2

其中最后兩步應該可以互換,但頭兩步不行。如果你有留意編譯過程,會發現,當gcc編譯的時候,一旦內部編譯第一次gcc完成,產生了xgcc文件,隨后的編譯就會利用新編譯的gcc以及第一遍的binutils,而不是宿主的gcc和binutils。

正如youbest指出的,第一遍的binutils和gcc存在的意義,僅僅是為了能編譯出glibc。而glibc的編譯需要工具鏈所有其它內容,包括binutils,gcc和頭文件。

LFS不使用交叉編譯,因此host和target永遠是一樣的。在編譯參數中,我們永遠看不到--host和--target的身影。但是,由于工具鏈的引用路徑需要反復變化,因此我們需要通過修改specs來更改。這點是LFS比較容易出錯的地方。

CLFS顧名思義,是要采用交叉編譯的。其構造順序如下:

頭文件->cross binutils->cross-gcc c->glibc->gcc final (c/c++)

我們首先看到頭文件被放在了開頭。這不是必須的,它完全可以放在glibc之前。cross-gcc只能編譯出C編譯器,因為這時候工具鏈還不全,glibc還不存在,不可能編譯出C++編譯器。然后構建glibc。之后,我們才能編譯出C++編譯器,完成我們的工具鏈。

CLFS-SYSROOT的工具鏈稍有不同,順序如下:

頭文件->cross-binutils->glibc頭文件->cross-gcc c->gibc->gcc-final (c/c++)

我們看到這里多了一個glibc頭文件的安裝。事實上,這是由于這里編譯的gcc是要用sysroot的緣故。在gcc/configure里面有一段代 碼,大家在vi里面輸入/inhibit_libc=false就可以發現,在交叉編譯,而沒有SYSROOT的情況下,inhibit_libc的值會 成為true,而要是sysroot了,就false了。

這個變量的作用,如同有關的注釋所述,是用來關閉gcc對glibc頭文件的依賴。因此,在sysroot下我們才會需要這樣一個安裝glibc頭文件的步驟。

我想在sysroot下消除這個步驟,之前測試過這個補丁可行:

使用這個sed命令打個補丁即可:

cp gcc/configure{,.orig}

sed -e 's/inhibit_libc=false/inhibit_libc=true/g' gcc/configure.orig > gcc/configure

不過最近發現有更簡單的方法:在configure的時候加個參數--with-newlib即可。建議采用這個方法,因為不需要打任何補丁。

在此再說一句,工具鏈構建過程中,編譯腳本對于是否交叉編譯的判斷非常簡單,只要host!=target,就會被認為正在交叉編譯。這也就是為什么 CLFS中使用的$CLFS_HOST通常都是i686-cross-linux-gnu這樣的形式。原因很簡單,因為要確保$CLFS_HOST 與$CLFS_TARGET不同。這樣,你完全可以在i686上"交叉編譯"i686的代碼。

這點非常重要,這意味著我們不需要打任何補丁,即可利用CLFS和CLFS-SYSROOT代替LFS來完成系統。對于想做Multilib的朋友,這也是一個福音。畢竟,CLFS-SYSROOT比起CLFS和LFS來,節省了大量的編譯過程。

最后,我們來理解一下如何作CCLFS工具鏈。這意味著我們要在一個平臺上構建在第二個平臺上運行、生成第三個平臺上代碼的工具鏈。我們用build表示 構建工具鏈的機器,host表示工具鏈要運行的機器,target表示工具鏈生成的代碼所在機器。而在工具鏈組件上,host-target binutils表示該binutils在host上運行,要生成target的代碼。

步驟如下:

host 頭文件->build-host binutils->build-host gcc c->host glibc->target 頭文件->build-target binutils->build-target gcc c->target glibc->host-target binutils->host-target gcc final (c/c++)

注意事項如下。首先,頭文件必須在相應的glibc之前安裝。其次,build-target的binutils和gcc在這里的目的是生成target glibc。而build-host binutils 還會被構建host-target binutils和gcc的過程使用到。最后,前兩次的gcc都可以只生成c編譯器,因為他們的目的都只是生成glibc。只有最后一次gcc需要完整生成。

from: http://www.linuxsir.org/bbs/thread325648.html


posted on 2009-06-25 11:56 runsisi 閱讀(562) 評論(0)  編輯 收藏 引用 所屬分類: embedded system

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            毛片精品免费在线观看| 亚洲第一综合天堂另类专| 久久久精彩视频| 久久亚洲国产成人| 在线观看亚洲精品| 男男成人高潮片免费网站| 毛片基地黄久久久久久天堂| 尤物九九久久国产精品的分类| 欧美激情中文字幕乱码免费| 欧美成人免费全部| 性伦欧美刺激片在线观看| 欧美在现视频| 亚洲自拍16p| 久久一区二区三区超碰国产精品| 日韩亚洲精品视频| 亚洲综合国产| 亚洲一区在线视频| 好看的日韩视频| 一本一本久久a久久精品牛牛影视| 国产欧美日韩一区| 亚洲精品一区二区在线| 在线观看中文字幕亚洲| 亚洲曰本av电影| 亚洲一区在线观看视频| 麻豆成人小视频| 美女日韩欧美| 国产亚洲毛片| 久久aⅴ国产欧美74aaa| 欧美一区二区性| 国产欧美精品一区二区色综合 | 免费看黄裸体一级大秀欧美| 欧美日韩另类国产亚洲欧美一级| 欧美成人影音| 亚洲欧洲精品一区二区三区波多野1战4| 久久成人免费日本黄色| 久久精品国产亚洲一区二区三区 | 亚洲另类春色国产| 亚洲国产精品久久久| 久久久久9999亚洲精品| 免费观看成人鲁鲁鲁鲁鲁视频| 激情久久久久久久| 欧美v国产在线一区二区三区| 免费视频最近日韩| 亚洲影视九九影院在线观看| 欧美国产日韩一区二区在线观看| 亚洲国产精品一区二区三区| 亚洲久久视频| 亚洲免费视频一区二区| 久久精品国产99| 亚洲国产精品第一区二区| 欧美少妇一区| 久久久久久一区二区三区| 亚洲免费大片| 你懂的一区二区| 午夜精品免费| 亚洲第一综合天堂另类专| 欧美日韩在线播放三区| 久久精品99国产精品日本| 亚洲三级免费观看| 久久人人精品| 先锋影音网一区二区| 亚洲免费久久| 亚洲精品偷拍| 亚洲三级免费电影| 在线观看国产精品网站| 国产欧美一区在线| 国产乱码精品1区2区3区| 欧美一区二区三区四区在线观看地址 | 影院欧美亚洲| 国产日韩精品入口| 国产精品乱码| 国产精品xvideos88| 欧美大尺度在线观看| 久久伊人精品天天| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲午夜电影| 欧美一区在线视频| 久久久夜夜夜| 欧美激情第五页| 欧美三级乱人伦电影| 国产精品亚洲а∨天堂免在线| 欧美黄色一区二区| 模特精品在线| 一本一本久久a久久精品牛牛影视| 亚洲欧洲一区| 亚洲一区二区在线免费观看视频| 午夜免费久久久久| 久久亚洲风情| 欧美日韩国产片| 激情成人综合网| 亚洲性夜色噜噜噜7777| 久久综合激情| 在线亚洲自拍| 欧美激情网站在线观看| 国产精品三级视频| 91久久午夜| 久久国产欧美日韩精品| 亚洲电影有码| 欧美一区二区精品久久911| 欧美伦理在线观看| 影视先锋久久| 国产精品一区二区三区乱码| 亚洲精品资源美女情侣酒店| 久久网站热最新地址| 一区二区三区视频在线看| 久久久亚洲午夜电影| 国产精品日韩欧美一区二区三区| 亚洲精品欧美一区二区三区| 久久影视精品| 欧美一区二区大片| 国产精品免费电影| 午夜视频一区在线观看| 一区二区三区www| 欧美日韩成人在线观看| 91久久黄色| 久久综合久久综合久久| 久久精品女人的天堂av| 国产精品欧美激情| 欧美专区第一页| 欧美在线一二三四区| 国产综合视频| 亚洲高清av| 欧美日韩免费一区二区三区视频| 亚洲精品视频免费| 亚洲国产精品久久久| 你懂的成人av| 欧美激情一二区| 亚洲亚洲精品三区日韩精品在线视频 | 一区二区欧美在线| 日韩小视频在线观看| 国产精品理论片在线观看| 亚洲一区二区三区高清| 亚洲欧美中文另类| 亚洲激情影视| 午夜一区不卡| 亚洲精品免费网站| 中文在线一区| 激情视频亚洲| 亚洲视频播放| 国产精品入口66mio| 欧美超级免费视 在线| 欧美.www| 久久精品国产一区二区电影| 欧美精品二区三区四区免费看视频| 亚洲字幕一区二区| 欧美暴力喷水在线| 麻豆精品网站| 国产日韩欧美一区二区三区在线观看 | 国产日韩欧美一区二区| 亚洲激情另类| 亚洲日韩中文字幕在线播放| 欧美一区二视频在线免费观看| 亚洲午夜一区| 欧美另类高清视频在线| 免费日韩av电影| 伊人婷婷久久| 久久久久久久久一区二区| 欧美在线三区| 国产精品黄色在线观看| 日韩视频永久免费| 99精品国产热久久91蜜凸| 母乳一区在线观看| 亚洲第一页在线| 亚洲视频一区在线| 亚洲人妖在线| 一区二区三区精品国产| 欧美精品二区三区四区免费看视频| 欧美激情二区三区| 一区二区电影免费观看| 国产精品久久国产精麻豆99网站| 日韩系列欧美系列| 欧美在线精品一区| 亚洲欧洲精品成人久久奇米网| 欧美高清视频| 亚洲欧美电影院| 美女啪啪无遮挡免费久久网站| 亚洲国产高潮在线观看| 欧美三级视频在线观看| 久久精品国产亚洲一区二区三区 | 亚洲欧美不卡| 久久久免费精品视频| 99国产一区| 国内久久视频| 国产精品一二一区| 欧美电影免费观看高清| 亚洲在线观看视频网站| 奶水喷射视频一区| 久久国产免费| 欧美一区二区三区成人| 国产精品v欧美精品v日韩精品| 欧美亚洲日本国产| 亚洲自拍偷拍色片视频| 亚洲精品国产视频| 国产精品亚洲人在线观看| 美女尤物久久精品| 欧美亚洲免费| 久久福利电影| 久久国产精品亚洲77777| 午夜激情亚洲| 欧美一区二区三区精品|