configure交叉編譯 說明
阿新 • • 發佈:2019-01-08
交叉編譯某個應用程式時,通常需要 ./configure 來生成對應的 Makefile
./configure 最關鍵的三個選項是:
--host=HOST
指定軟體執行的系統平臺.如果沒有指定,將會執行`config.guess'來檢測.
--build=BUILD
指定軟體包安裝的系統平臺.如果沒有指定,預設值將是'--host'選項的值.
--target=GARGET
指定軟體面向(target to)的系統平臺.這主要在程式語言工具如編譯器和彙編器上下文中起作用.如果沒有指定,預設將使用'--host'選項的值.
記住:--host 指定的是交叉編譯工具鏈的字首
在 i686 開發機上交叉編譯出 ethtool,讓其在powerpc開發板上執行
1.下載原始碼並解壓
#cd /home/wanghui/
#tar xvfz ethtool-6.tar.gz
#cd ethtool-6
2.交叉編譯
確保交叉編譯工具鏈的bin檔案在PATH環境變數裡
#echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/montavista41/montavista/cge/devkit/ppc/85xx/bin/:/home/wanghui/bin
#./configure --host=ppc-linux
#make
3.檢視生成檔案
#file ethtool
ethtool: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
shit! 交叉編譯失敗,腫麼還是X86的bin檔案,肯定是configure出了問題,導致Makefile用的不是交叉編譯工具鏈的gcc
4.檢視config.log
有這麼一句:
configure:1790: checking for ppc-linux-gcc
configure:1819: result: no
configure:1828: checking for gcc
configure:1844: found /usr/bin/gcc
我擦,沒找到ppc-linux-gcc
cd /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin
到裡面一看,崩潰了,原來是 ppc_85xx-gcc,所有bin檔案字首是 ppc_85xx
5.重新交叉編譯
#./configure --host=ppc_85xx
#make
6.檢視生成檔案
#file ethtool
ethtool: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped
檢視cofig.log
configure:1662: checking for ppc_85xx-strip
configure:1678: found /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin//ppc_85xx-strip
configure:1688: result: ppc_85xx-strip
configure:1757: checking whether to enable maintainer-specific portions of Makefiles
configure:1766: result: no
configure:1790: checking for ppc_85xx-gcc
configure:1806: found /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin//ppc_85xx-gcc
記住:--host 指定的是交叉編譯工具鏈的字首”
./configure 最關鍵的三個選項是:
--host=HOST
指定軟體執行的系統平臺.如果沒有指定,將會執行`config.guess'來檢測.
--build=BUILD
指定軟體包安裝的系統平臺.如果沒有指定,預設值將是'--host'選項的值.
--target=GARGET
指定軟體面向(target to)的系統平臺.這主要在程式語言工具如編譯器和彙編器上下文中起作用.如果沒有指定,預設將使用'--host'選項的值.
--prefix=/work/gaoht/gsoap/target
指定軟體安裝的位置
記住:--host 指定的是交叉編譯工具鏈的字首
LDFLAGS="-L/usr/non-standard-path/python/lib"
指定動態庫的路徑
##################################################################################################################################在 i686 開發機上交叉編譯出 ethtool,讓其在powerpc開發板上執行
1.下載原始碼並解壓
#cd /home/wanghui/
#tar xvfz ethtool-6.tar.gz
#cd ethtool-6
2.交叉編譯
確保交叉編譯工具鏈的bin檔案在PATH環境變數裡
#echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/montavista41/montavista/cge/devkit/ppc/85xx/bin/:/home/wanghui/bin
#./configure --host=ppc-linux
#make
3.檢視生成檔案
#file ethtool
ethtool: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
shit! 交叉編譯失敗,腫麼還是X86的bin檔案,肯定是configure出了問題,導致Makefile用的不是交叉編譯工具鏈的gcc
4.檢視config.log
有這麼一句:
configure:1790: checking for ppc-linux-gcc
configure:1819: result: no
configure:1828: checking for gcc
configure:1844: found /usr/bin/gcc
我擦,沒找到ppc-linux-gcc
cd /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin
到裡面一看,崩潰了,原來是 ppc_85xx-gcc,所有bin檔案字首是 ppc_85xx
5.重新交叉編譯
#./configure --host=ppc_85xx
#make
6.檢視生成檔案
#file ethtool
ethtool: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped
檢視cofig.log
configure:1662: checking for ppc_85xx-strip
configure:1678: found /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin//ppc_85xx-strip
configure:1688: result: ppc_85xx-strip
configure:1757: checking whether to enable maintainer-specific portions of Makefiles
configure:1766: result: no
configure:1790: checking for ppc_85xx-gcc
configure:1806: found /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin//ppc_85xx-gcc
configure:1816: result: ppc_85xx-gcc
注意:
今天在交叉編譯時犯了一個錯誤,糾結了好久,以前交叉編譯器的字首基本上都是用arm-Linux-,這次換了一個新環境是arm-none-linux-gnueabi-,於是想當然的把configure中的host引數設定為--host arm-linux,於是就犯了一些錯誤。把它改為--host arm-none-linux-gnueabi就可以了。詳細請看:
“一般而言,我們只要指定 --host 就可以了記住:--host 指定的是交叉編譯工具鏈的字首”