armgcc編譯
具體安裝步驟如下,首先下載安裝包。
1、解壓文件
解壓 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C/(
直接解壓後就可以,-C/會讓解壓的文件自動放在根目錄下指定路徑,不用管)
下載arm-linux-gcc-4.4.3.tgz到任意的目錄下,進入這個文件夾
sudo tar xvzf arm-linux-gcc-4.4.3.tgz –C /
2、建立目錄
sudo mkdir /usr/local/arm
3、復制文件
sudo cp -r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm
5、添加環境變數
修改/etc/profile文件(此文件屬於系統級別的環境變數,設置在裡面的東西對所有用戶適用)
sudo gedit /etc/profile
增加路徑設置,在末尾添加如下:
export PATH=$PATH:/usr/local/arm/4.4.3/bin。
至此安裝步驟到此完成。
『貳』 如何製作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
『叄』 arm-linux-gcc無法編譯程序求大神指導
首先,arm-linux-gcc這個交叉編譯工具安裝好後,需要加入到主機的環境變數中,一般ubuntu中的是/etc/environment,或者是.bashrc中,關於如何將arm-linux-gcc添加到環境變數中,里搜一下,有很多介紹的文章。
添加好後編譯成功,生成的是基於arm目標板的文件,直接在主機中運行./hello是不對的
『肆』 arm 的 gcc 編譯問題。
這個問題是因為,SDL重新定義了main函數,在SDL_main.h裡面,有
#define main SDL_main
語句,將main函數重新定義為SDL_main。
解決辦法是,在gcc編譯時,加入_Dmain = SDL_main,告訴編譯器真正的main函數即可。
至於gcc的選項,凡是-l開頭的,都是指定連接的庫文件。其它的選項,你查看gcc的幫助,裡面有詳盡的說明。
『伍』 arm-linux-gcc怎麼編譯文件
可以使用gcc命令進行編譯:
例子:
gcc -o hello hello.c #在這里hello.c是源文件,hell為目標輸出文件
通過編譯器編譯主要是經過:預處理,匯編,編譯和鏈接的過程;
『陸』 深度linux的arm-linux-gnueabihf-gcc編譯參數如何配
一般來說,交叉編譯工具是用於在一種架構的主機(例如x86)上,編譯另一種主機(例如arm)運行的程序,在這個編譯期間,需要用到的頭文件/庫,往往需要從一個叫目標文件系統(sysroot)的路徑開始查找。
sysroot里包含usr,lib,usr/lib usr/include等文件夾結構和必要的頭文件和庫,你理解為目標機器上的整個文件系統,搬到你這台電腦上,然後作為一個文件夾存在。
交叉編譯原則上不能用主機(host)的頭文件,
這首先是因為編譯器在查找頭文件的相對路徑時,交叉編譯器會配置為查找目標平台架構的位置,和主機的gcc不一樣,這也是為什麼它去arm-linux-gnueabihf這個目錄去尋找的原因。
其次主機和目標機的系統版本有差異,再加上處理器架構的差異,往往有很多兼容性問題,甚至有難以解決的編譯錯誤。
如果一定要用本機的頭文件系統來湊合,那麼需要把所有的-I都列出來,即不僅需要-I/usr/include,還需要-I/usr/include/xxx,甚至要創建一些文件夾的符號鏈接指向你主機的這些頭文件文件夾。即使這些,往往也未必成功,有些頭文件不同的系統架構,會不完全一樣甚至缺失。
交叉編譯一般無法使用主機的庫(so)文件
主機和目標機往往架構不同,庫完全不能使用
可能遇到主機和目標機架構相同的情況,比如你在intel64上編譯一套運行在intel64位手機的程序,但是庫兼容性的問題仍然存在。
最後結論:你這個問題,如果你是為了另一套機器(比如arm開發板編譯),那麼需要搞一套目標機的文件系統才能順利編譯。
對了,目標文件系統需要編譯了python和dev頭文件/庫,好多嵌入式設備裁剪的很厲害,都不用python。
『柒』 可不可以用arm-linux-gcc編譯gcc編譯後的執行文件
不可以,arm-linux-gcc編譯生成的可執行文件是在
嵌入式linux
下運行的,是不能再編譯已經編譯過生成的執行文件的。一般說來的gcc是linux下的
編譯器
。兩者有區別。
『捌』 (arm, linux): gcc的編譯選項「-MT $(*F).o -MF dep/$(@F).d」是什麼意思
你這是makefile裡面截出來的吧。。。。。。你問的那些不是gcc的命令,是make的自動變數。。。。。。。。。。。。。。。。。
$(*F)是目標的文件名。比如你的目標是src/foo.c,那$(*F)就是foo
$@代表make中的目標文件集合(所有目標文件),$(@F)是指這個目標文件集合裡面所有的不包含路徑的文件名。比如你的$@是src/foo.o,那$(@F)就是foo.o
『玖』 arm linux gcc怎麼編譯
1
gcc
-g
test_gdb.c
-o
test_gdb
只有加入選項-g才能被gdb調試。
使用quit命令,輸入:
quit
即可。
list:顯示10源代碼,再次輸入該命令顯示接下來的10行。
list1,10:顯示從第一行到第10行的代碼。
在gdb中最簡單的設置方式是:break
行號
在這一行設置斷點。比如break9
會在代碼的第9行設置斷點。當程序執行到第9行會自動暫停,此時,第9行代碼還未執行。
你也可以使用:break
函數名
的方式在某個函數處設置斷點,程序運行到這個函數內的第一條語句處會自動暫停。
使用命令:clear
行號
即可刪除。
兩種命令:next和step。兩者均可以一句一句的查看語句。但不同的是,next命令將函數調用看作一條語句,而step則會進入函數,一步步的執行函數內的代碼。
輸入命令:continue。它可以讓程序繼續運行,直到程序運行完畢或者遇到下一個斷點為止。
11.當程序在斷點處暫停執行時,如何查看當前變數的值?
使用print命令。
這時我總結的linux
gdb,希望對你有幫助
『拾』 bootloader和ARM linux gcc交叉編譯有關系嗎
首先這兩者之間沒有一個直接的聯系。
在做嵌入式開發的時候,如果是ARM平台,那麼相應的bootloader也是需要使用ARM平台的交叉編譯工具進行編譯的,因為每一個架構的匯編指令(其實更准確來說,應該是機器碼)是不一樣的,因此需要針對於此架構的編譯器進行編譯,生成ARM平台可用的bootloader。
舉個例子:
A代碼 --> 經過 intel 架構的 gcc 編譯工具 ---> B 格式的程序(可以在支持B格式的intel架構的設備上運行)
A代碼 --> 經過 ARM 架構的 交叉gcc 編譯工具 ---> C 格式的程序(可以在支持C格式的ARM架構的設備上運行)
bootloader 類似於PC上的BIOS,是在啟動操作系統之前,做一些硬體初始化的工具,以保證可以正常載入內核進行啟動。
