關於交叉編譯中host,build,target記載
以下為轉載連結,以備以後檢視所用。
一、build host target 的區別
(1)ubuntu16.04 的引數資訊如下(gcc -v 檢視)
build:執行程式碼編譯的主機,正常的話就是你的主機系統。
host:編譯出來的二進位制程式所執行的主機,因為絕大多數是如果本機編譯,本機執行。所以這個值就等於build。
--build=x86_64-linux-gnu :執行程式碼編譯的主機
--host=x86_64-linux-gnu :編譯出來的二進位制程式所執行的主機
--target=x86_64-linux-gnu :只有在建立交叉編譯環境的時候用到,正常編譯和交叉編譯都不會用到。他用build主機上的編譯器,編譯一個新的編譯器
(2)搭建交叉編譯環境,或者是交叉編譯程式
只有host !=build的時候編譯才是交叉編譯。否則就是正常編譯
例子:
./configure --build=i686-linux-gnu --host=arm-poky-linux-gnueabi
其中--build=i686-linux-gnu 為本機編譯器的名字(ubuntu16.04)
--host=arm-poky-linux-gnueabi(開發板的名字)
開源軟體的交叉編譯步驟:
./configure –help 檢視幫助文件
./configure –prefix=安裝路徑 --build=i686-linux-gnu --host=arm-poky-linux-gnueabi
(3)製作交叉編譯工具鏈
--prefix 指明安裝路徑
二、 交叉編譯註意事項:
執行一個程式時有沒有sudo 對環境變數的影響很大
例如 :當以普通使用者登入時 ,將環境變數加在了當前使用者下的.bashrc中,當以sudo 執行時,此刻環境變數就找不到了,因為此時找的是root下的.bashrc ,而這個檔案中並沒有所新增的環境變數。
當交叉編譯工具鏈的環境變數在普通使用者下時,在執行配置指令碼只能用./configure
如果針對多使用者都需要用,建議把環境變數加在root下的.bashrc中
三、 環境變數在自己寫的指令碼的執行: source 相當於 .
source 讀取指令碼的環境變數輸出到 本shell 中
此時用 source imx6qt.sh 或者 . imx6qt.sh
四、當重新交叉編譯時:
必須執行 make clean –w 刪除makefile檔案
make distclean