Ⅰ 關於arm-linux-gcc
首先運行一下arm-linux-gcc看能運行編譯器嗎,不能就把arm-linux-gcc安裝錄像添加到PATH環境變數。再有看一下kernel的Makefile里工具鏈的前綴是不是跟你實際安裝的工具鏈一致。
Ⅱ 可不可以用arm-linux-gcc編譯gcc編譯後的執行文件
不可以,arm-linux-gcc編譯生成的可執行文件是在
嵌入式linux
下運行的,是不能再編譯已經編譯過生成的執行文件的。一般說來的gcc是linux下的
編譯器
。兩者有區別。
Ⅲ 如何製作arm-linux-gcc編譯工具
一、下載源文件
源代碼文件及其版本:
binutils-2.19.tar.bz2, gcc-core-4.4.4.tar.bz2 gcc-g++-4.4.4.tar.bz2 Glibc-2.7.tar.bz2 Glibc-ports-2.7.tar.bz2 Gmp-4.2.tar.bz2 mpfr-2.4.0.tar.bz2mpc-1.0.1.tar.gz Linux-2.6.25.tar.bz2 (由於我在編譯出錯的過程中,根據出錯的信息修改了相關的C代碼,故而沒有下載相應的補丁)
一般一個完整的交叉編譯器涉及到多個軟體,主要包括bilinguals、cc、glibc等。其中,binutils主要生成一些輔助工具;gcc是用來生成交叉編譯器,主要生成arm-linux-gcc交叉編譯工具,而glibc主要提供用戶程序所需要的一些基本函數庫。
二、建立工作目錄
編譯所用主機型號 fc14.i686,虛擬機選的是VM7.0,Linux發行版選的是Fedora9,
第一次編譯時用的是root用戶(第二次用一般用戶yyz), 所有的工作目錄都在/home/yyz/cross下面建立完成,首先在/home/yyz目錄下建立cross目錄,然後進入工作目錄,查看當前目錄。命令如下:
創建工具鏈文件夾:
[root@localhost cross]# mkdir embedded-toolchains
下面在此文件夾下建立如下幾個目錄:
setup-dir:存放下載的壓縮包;
src-dir:存放binutils、gcc、glibc解壓之後的源文件;
Kernel:存放內核文件,對內核的配置和編譯工作也在此完成;
build-dir :編譯src-dir下面的源文件,這是GNU推薦的源文件目錄與編譯目錄分離的做法;
tool-chain:交叉編譯工具鏈的安裝位;
program:存放編寫程序;
doc:說明文檔和腳本文件;
下面建立目錄,並拷貝源文件。
[root@localhost cross] #cd embedded- toolchains
[root@localhost embedded- toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc
[root@localhost embedded- toolchains] #ls
build-dir doc kernel program setup-dir src-dir tool-chain
[root@localhost embedded- toolchains] #cd setup-dir
拷貝源文件:
這里我們採用直接拷貝源文件的方法,首先應該修改setup-dir的許可權
[root@localhost embedded- toolchains] #chmod 777 setup-dir
然後直接拷貝/home/yyz目錄下的源文件到setup-dir目錄中,如下圖:
建立編譯目錄:
[root@localhost setup-dir] #cd ../build-dir
[root@localhost build -dir] #mkdir build-binutils build-gcc build-glibc
三、輸出環境變數
輸出如下的環境變數方便我們編譯。
為簡化操作過程。下面就建立shell命令腳本environment-variables:
[root@localhost build -dir] #cd ../doc
[root@localhost doc] #mkdir scripts
[root@localhost doc] #cd scripts
用編輯器vi編輯環境變數腳本envionment-variables:[root@localhost scripts]
#vi envionment-variables
export PRJROOT=/home/yyz/cross/embedded-toolchains
export TARGET=arm-linux
export PREFIX=$PRJROOT/tool-chain
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PREFIX/bin:$PATH
截圖如下:
執行如下語句使環境變數生效:
[root@localhost scripts]# source ./environment-variables
四、建立二進制工具(binutils)
下面將分步介紹安裝binutils-2.19.1的過程。
[root@localhost script] # cd $PRJROOT/src-dir
[root@localhost src-dir] # tar jxvf ../setup-dir/binutils-2.19.1.tar.bz2
[root@localhost src-dir] # cd $PRJROOT/build-dir/build-binutils
創建Makefile:
[root@localhost build-binutils] #../../src-dir/binutils-2.19.1/configure --target=$TARGET --prefix=$PREFIX
在build-binutils目錄下面生成Makefile文件,然後執行make,make install,此過程比較緩慢,大約需要一個15分鍾左右。完成後可以在$PREFIX/bin下面看到我們的新的binutil。
輸入如下命令
[root@localhost build-binutils]#ls $PREFIX/bin
Ⅳ GCC能否運行於ARM-Linux環境下即GCC能否在ARM平台上運行
簡答:
gcc可以運行在arm-linux下。
gcc,可以在arm平台上運行。
詳解:
gcc,一般指的是,pc版,x86的平台,
用於嵌入式系統,比如arm的cpu,linux的系統下,是:
本來,一直就可以的,
而且有專門的屬於:
交叉編譯
簡答說就是:
在你的pc端,x86的cpu上,製作出一個交叉編譯器
一般叫做arm-linux-gcc
用此arm-linux-gcc去編譯你的程序
編譯出來的程序,可以運行在嵌入式開發板,比如arm的linux下
極其詳盡的解釋:
我剛寫個教程,你去看就知道了:
交叉編譯詳解
交叉編譯詳解
http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html
此教程的主要內容包括:
了什麼是交叉編譯
為何要有交叉編譯
什麼是工具鏈
什麼是交叉工具鏈
交叉編譯器的名字的命名規則:包括你這里所說的arm-linux-gcc的含義
如何獲得交叉編譯器
製作交叉編譯器的各種工具:簡介了常見的crosstool-ng,buildroot,crosstool等等工具
使用已有的交叉編譯器和自己手動編譯交叉編譯器之間的對比
交叉編譯方面的心得和注意事項
等你看完了後,建議用crosstool-ng,或者是buildroot去自己編譯一個arm-linux的gcc。
Ⅳ gcc和arm-linux-gcc是什麼關系區別是什麼
gcc是linux系統下面用來將代碼編譯成一個可執行程序的手段。編譯出來的是適用於linux系統的可執行二進制文件。可執行程序其實就是一堆的0101二進制機器碼。這些機器碼代表什麼含義只有機器本身能理解。所以你用gcc編譯出來的可執行程序只有在linux系統下面可以運行。舉個例子你的可執行程序裡面有一句01011.這句在linux下面可能是吃飯的意思,但是在windows下面可能01011是撒尿的意思。那你說linux的可執行程序放在window下面能正常運行嗎?肯定不能嘛。你要的目的是吃飯,它幫你執行撒尿很顯然就不對了。同樣的可能01011在ARM下面的意思是睡覺。不同系統的機器碼含義是不一樣的。所以你在linux系統下面寫的代碼要怎樣才能在ARM系統上面跑呢。這就需要用到交叉編譯。arm-linux-gcc是什麼意思?就是告訴你的編譯器,我編寫的環境是linux,但是我希望生成的可執行程序是在arm上面跑的。這就是交叉編譯。編寫環境和執行環境分離的一種手段。
Ⅵ arm-linux-gcc 和gcc的問題
gcc 是需要針對目標架構設計的。
你這兩個輸出要是一樣,你就需要重裝 Linux 系統了。因為系統已經亂了。
arm-linux-gcc 是編譯到 arm CPU 架構的 gcc
直接 gcc 命令,是編譯到當前 CPU 架構的 gcc
他們不是一個東西,我的機器上有 4 個 gcc ,一個 x86-64 ,一個 mips64el 一個 mipsel ,一個 arm 。完全不沖突。
編譯軟體時,需要針對調用即可。
調用錯誤會導致編譯出來的程序無法運行。
一般軟體 ./configure 時設置好參數,make 時會自動調用對應的 gcc 。但有的軟體在 make 時需要附加參數,比如 kernel 就是這樣。