ubuntu下編譯交叉編譯工具鏈
交叉編譯工具鏈在arm開發中出很重要的位置,開發之前肯定要先有編譯器 聯結器 彙編器等基礎的編譯工具。arm體系是一個很複雜的體系,裡面的指令有數個版本不同的體系level還有很多自己的特點 ,這就要求編譯器也要出幾個版本的針對不同的應用。
當然網路上存在很多的編譯器的資源,但是作為一個嵌入式開發人員還是要會自己構建出來一個工具鏈的,做到只能說不想做,不能說做不到,不然真的遇到特殊應用的需要無法作出編譯器專案就直接掛了。
整個工具鏈的編譯過程如果採用純手工的step by step 真的需要幾天時間,並且對於意志力的要求會很高,因為每一步都會產生很多的問題。對於整個檔案結構,系統環境,需要關聯的各種庫要求很複雜,尤其是很多庫的版本組合是很難確定的。
這裡我們用一個先用一個簡單的方法區進行,就是利用一個存在的強大指令碼crosstool-ng 來編譯出工具鏈
這個指令碼可以幫助我們下載需要的檔案,做目錄的準備等工作。
下載地址是在 http://crosstool-ng.org/ 這裡想一個ftp站 ,我用的事最新的1.19.0版本
雖然crosstool-ng 可以幫我們自動的下載關聯檔案,但是對於系統的環境還是我們自己需要搞定的,有幾個是系統必須有的
這裡我們就直接系統聯網直接更新了
#sudo apt-get install g++ libncurses5-dev bison flex texinfo automake libtool patch gcj cvs gawk
這些要安裝的工具中 gcj實力面比較複雜的 ,需要手動下載,這裡就自己在網路下嗖嗖。
安裝步驟
1.到home檔案路徑下 就是家目錄,不是HOME 目錄
2.建立真個編譯執行的工作目錄
#mkdir crosstool
3.拷貝下載指令碼壓縮檔案到工作目錄 並解壓
#cp ~/下載/tar/crosstool-ng-1.9.0.tar.bz2 ./crosstool
#tar jxvf crosstool-ng-1.9.0.tar.bz2
4.建立需要的檔案目錄結構
進入工作目錄
#cd crosstool
#mkdir crosstool-build
#mkdir crosstool-install
#mkdir src
5.進入指令碼目錄 執行指令碼 拷貝依賴檔案到工作目錄
#cd crosstool-ng-1.19.0
#./configure --prefix=~/crosstool/crosstool-install
#make
#make install
#cp ../crosstool-ng-1.9.0/samples/arm-unknown-linux-gnueabi/* ./
6.必要的修改
#mv crosstool.config .config
7.執行圖形介面配置工具編譯過程和編譯選項
#../crosstool-install/bin/ct-ng menuconfig
會出來一個介面進行選擇 y 選擇 n不選
幾個關鍵配置
Paths and misc options ---> 添(/home/xuww/crosstool/src) Local tarballs directory 存放原始碼包圍之
(/home/yao/crosstool/tools) Prefix directory 編譯器安裝路徑,也就是編譯結果生成的編譯器存在的位置
Target options --->
*** Target optimisations ***
(armv4t) Architecture level
(arm9tdmi) Emit assembly for CPU
(arm920t) Tune for CPU
編譯的執行緒 回教快編譯速度,不宜超過四
Paths and misc options --->
(2) Number of parallel jobs
關閉java編譯器
C compiler --->
[ ] Java
預設是開得 中間有星號 按N
設定編譯器字首中的第二個字元 一般是公司名嗎
Toolchain options ---> (xuww) Tuple's vendor string
C compiler --->(crosstool-NG-${CT_VERSION}-yh) gcc ID string #cd ~/crosstool/crosstool-build
8.開始進入編譯的目錄 crosstool-build
#cd ~/crosstool/crosstool-build
#../crosstool-install/bin/ct-ng build
就開始等吧 估計網速可以的換也就一個小時 如果網速慢機器破 就掛機吧 兩小時以上那
相關文章
- 製作交叉編譯工具鏈概述編譯
- 交叉編譯工具鏈構建原理編譯
- 全網可用交叉編譯工具鏈大全編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- 交叉編譯編譯
- lazarus交叉編譯編譯
- GDB交叉編譯編譯
- golang交叉編譯Golang編譯
- ubuntu16交叉編譯Qt5.9Ubuntu編譯QT
- Go語言交叉編譯工具goxGo編譯
- 交叉編譯入門編譯
- go 交叉編譯,部署Go編譯
- 淺談交叉編譯編譯
- 關於Gdb工具的交叉編譯、移植編譯
- Rust 交叉編譯與條件編譯總結Rust編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- 編譯器的自展和自舉、交叉編譯編譯
- Go 編譯和工具鏈Go編譯
- Android NDK 提供的交叉工具鏈手動編譯原始碼Android編譯原始碼
- 交叉編譯和 RPC編譯RPC
- wifidog交叉編譯WiFi編譯
- android NDK 交叉編譯Android編譯
- golang初學:交叉編譯Golang編譯
- ubuntu下 編譯安裝swftoolsUbuntu編譯
- Golang在各平臺下如何交叉編譯Golang編譯
- 在WSL下為OpenWRT交叉編譯出CMake編譯
- Go跨平臺交叉編譯Go編譯
- linux與windows交叉編譯LinuxWindows編譯
- 交叉編譯mupdf1.15.0編譯
- Go - armv7 交叉編譯Go編譯
- linux(ubuntu)下的64位編譯器編譯32位程式LinuxUbuntu編譯
- VLC在ubuntu環境下編譯編譯
- Windows下Linux開發環境設定(二)--安裝Cygwin及交叉編譯工具鏈WindowsLinux開發環境編譯
- N1064編譯鏈編譯編譯
- protobuf 的交叉編譯使用(C++)編譯C++
- 開源編譯工具和編譯軟體編譯
- 重走LFS之路:(四) 工具鏈編譯-1編譯
- 重走LFS之路:(五) 工具鏈編譯-2編譯