當前位置:首頁 » 操作系統 » armlinuxgccgcc

armlinuxgccgcc

發布時間: 2025-09-19 00:35:37

A. 如何安裝arm-linux-gcc

1,下載並安裝arm-linux-gcc

arm-linux-gcc-4.2.1的版本在http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/這里可以下載,最新版arm-linux-tools-20080623.tar.gz這個可能是4.2.4的版本,因為下面有編譯4.2.4的方法還有相應的代碼包,build-arm-linux-4.2.14,此版本由於過大,我沒有下載。

下面的這個是ARM官方給的下載鏈接http://www.codesourcery.com/gnu_toolchains/arm/download.html,然後將HOST選擇為IA32 GNU/Linux,點擊下載就可以了。不過前綴為arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu而不是arm-linux-。。。

在友善之臂官方網站http://www.arm9.net/download.asp下載arm-linux-gcc4.4.3。

2,刪除之前安裝有舊版本,執行

[root@localhost ~]# rm -rf /opt/arm

3,對新版本arm-linux-gcc-4.4.3進行解壓(注意,如果我們加上了-C,那麼就會自動解壓到/usr/local/arm/這個目錄下),但是友善之臂按照下列方式解壓,不會解壓到/usr/local/arm/目錄下的,這是因為友善之臂把/usr/local/arm/目錄修改成了 /opt/FriendlyARM/toolschain/,除非自己在把它修改過來
[root@localhost ~]# tar -ivxzf /smbroot/arm-linux-gcc-4.4.3.tar.gz -C /

4,修改配置文件,將arm-linux-gcc添加到環境變數中,因為arm-linux-gcc的命令是在/usr/local/arm/4.4.3/bin下,其目的通過對全局變數綁定使之能夠在任意一個目錄下能夠執行該命令。

打開設置文件

[root@localhost opt]# vi /etc/profile

在打開的文件的

# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/arm/4.4.3/bin
fi
或者在文件末尾添加

export PATH=$PATH:/usr/local/arm/4.4.3/bin

保存退出

5,立即使新的環境變數生效,不用重啟電腦

[root@localhost opt]# source /etc/profile

[root@localhost opt]#

6,檢查是否將路徑加入到PATH:

[root@localhost opt]# echo $PATH

顯示的內容中有/usr/local/arm/4.4.3/bin,說明已經將交叉編譯器的路徑加入PATH。至此,交叉編譯環境安裝完成。
7,測試是否安裝成功

首先,執行find命令查詢一下arm-linux-gcc的位置

[root@localhost ~]# find / -name arm-linux-gcc

/opt/arm/toolschain/4.4.3/bin/arm-linux-gcc
[root@localhost ~]#

可以看到arm-linux-gcc的位置與環境變數中設定的路徑一致

接下來查詢arm-linux-gcc的版本

[root@localhost bin]# arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)
[root@localhost bin]#

可以看到arm-linux-gcc的版本號,至此,arm-linu-gcc已成功安裝。

B. 如何安裝arm-linux-gcc

安裝armlinuxgcc的步驟如下

  1. 下載安裝包或源碼

    • 最常見的方式是下載armlinuxgcc的安裝包,也可以從網上下載其源碼。
  2. 解壓安裝包

    • 進入Linux系統,將當前目錄設為armlinuxgcc的下載目錄。
    • 輸入命令tar xzf armlinuxgcc4.4.3.tar.gz,將文件解壓。解壓後會有一個opt的文件夾
  3. 創建並設置目錄

    • 在/usr/local/中建立一個名為arm的文件夾。
    • 輸入命令cd /usr/local/進入該目錄。
    • 輸入命令mkdir arm創建arm目錄。
    • 修改該文件夾的屬性為可讀寫執行,輸入命令chmod 777 arm。
  4. 復制源碼到目標目錄

    • 在Linux終端中輸入命令sudo cp r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm,將解壓得到的源碼復制到上一步中創建的arm文件夾下。注意路徑可能因解壓後的文件結構而異,需根據實際情況調整。
  5. 修改環境變數

    • 為了避免每次使用armlinuxgcc時都要輸入完整路徑,需要修改環境變數$PATH。
    • 輸入命令sudo gedit /etc/profile打開profile文件。
    • 在最後一行加上export PATH=$PATH:/usr/local/arm/4.4.3/bin。
    • 保存文件並退出編輯器。
  6. 使新的環境變數生效

    • 輸入命令source /etc/profile使新的環境變數設置生效。
    • 輸入命令echo $PATH查看當前環境變數,確認已包含armlinuxgcc的路徑。
  7. 驗證安裝

    • 輸入命令armlinuxgcc v查看版本信息。
    • 如果出現版本信息則表示安裝成功。

按照以上步驟操作,即可成功安裝armlinuxgcc交叉編譯工具。

C. ubuntu中安裝交叉編譯環境,arm-linux-gcc-vnotfound

在Ubuntu系統中遇到安裝交叉編譯環境,尤其是arm-linux-gcc時,可能出現找不到arm-linux-gcc的問題。這通常發生在64位的Ubuntu系統上。盡管在32位Ubuntu系統上配置好環境後通常不會遇到此問題,但在64位系統中執行arm-linux-gcc時,可能會出現提示找不到該文件或目錄的錯誤。

解決這個問題的關鍵在於確保系統中包含了32位運行庫。在64位系統中運行32位的unicorn(arm-linux-gcc)需要相應的32位運行庫支持。通過執行以下命令:

sudo apt-get install ia32-libs

即可解決這個問題。此命令將安裝ia32-libs庫,它包含了在64位系統中運行32位應用所需的所有32位庫文件。安裝完成後,嘗試再次執行arm-linux-gcc,問題應該會得到解決。

這是一個簡單而有效的解決方案,確保了在64位Ubuntu系統中能夠正常安裝並使用arm-linux-gcc進行交叉編譯工作。

請注意,這個解決方案基於在64位Ubuntu系統中解決arm-linux-gcc找不到問題的情況。如果遇到其他與交叉編譯環境相關的錯誤,可能需要進一步檢查系統配置、依賴庫以及編譯器版本等。

感謝提供問題解決方案的作者,希望這些信息對遇到類似問題的開發者有幫助。

D. 請問arm-linux-gcc和arm-linux-ld還有arm-linux-obj之間是什麼關系

arm-linux-ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,並連接符號引用。通常,建立一個新編譯程序的最後一步就是調用ld。

arm-linux-gcc -wall -O2 -c -o $@ $<
-o 只激活預處理,編譯,和匯編,也就是他只把程序做成obj文件
-Wall 指定產生全部的警告信息
-O2 編譯器對程序提供的編譯優化選項,在編譯的時候使用該選項,可以使生成的執行文件的執行效率提高
-c 表示只要求編譯器進行編譯,而不要進行鏈接,生成以源文件的文件名命名但把其後綴由 .c 或 .cc 變成 .o 的目標文件
-S 只激活預處理和編譯,就是指把文件編譯成為匯編代碼
arm-linux-ld 直接指定代碼段,數據段,BSS段的起始地址
-Tbss ADDRESS Set address of .bss section

-Tdata ADDRESS Set address of .data section

-Ttext ADDRESS Set address of .text section
示例:
${CROSS}ld -Ttext=0x33000000 led.o -o led.elf
使用連接腳本設置地址:
arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf
其中beep.lds 為連接腳本如下:
arm-linux-obj被用來復制一個目標文件的內容到另一個文件中,可用於不同源文件的之間的格式轉換
示例:
arm-linux-obj –o binary –S elf_file bin_file
常用的選項:
input-file , outflie
輸入和輸出文件,如果沒有outfile,則輸出文件名為輸入文件名
2.-l bfdname或—input-target=bfdname
用來指明源文件的格式,bfdname是BFD庫中描述的標准格式名,如果沒指明,則arm-linux-obj自己分析
3.-O bfdname 輸出的格式
4.-F bfdname 同時指明源文件,目的文件的格式
5.-R sectionname 從輸出文件中刪除掉所有名為sectionname的段
6.-S 不從源文件中復制重定位信息和符號信息到目標文件中
7.-g 不從源文件中復制調試符號到目標文件中
arm-linux-objmp
查看目標文件(.o文件)和庫文件(.a文件)信息
arm-linux-objmp -D -m arm beep.elf > beep.dis
-D 顯示文件中所有匯編信息
-m machine

指定反匯編目標文件時使用的架構,當待反匯編文件本身沒有描述架構信息的時候(比如S-records),這個選項很有用。可以用-i選項列出這里能夠指定的架構.
[guowenxue@localhost asm_c_buzzer]$ cat beep.lds
/***********************************************************************
* File: beep.lds
* Version: 1.0.0
* Copyright: 2011 (c) Guo Wenxue <[email protected]>
* Description: Cross tool link text, refer to u-boot.lds
* ChangeLog: 1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"
*
**********************************************************************/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS{
. = 0x33000000;
.text : {

*(.text)
*(.rodata)
}

.data ALIGN(4): {

*(.data)

}
.bss ALIGN(4): {

*(.bss)

}

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile

# ***********************************************************************

# * File: makefile

# * Version: 1.0.0

# * Copyright: 2011 (c) Guo Wenxue <[email protected]>

# * Description: Makefile used to cross compile the ASM and C source code

# * ChangeLog: 1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *
# ***********************************************************************
CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-
CFLAGS =
beep.bin: start.S beep.c
arm-linux-gcc $(CFLAGS) -c -o start.o start.S

arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

arm-linux-obj -O binary -S beep.elf beep.bin

rm -f *.elf *.o
install:
cp beep.bin ~/winxp -f --reply=yes
clean:
rm -f *.elf *.o
rm -f beep.bin

E. arm-linux-gcc 和 arm-elf-gcc 的區別

在基於ARM的嵌入式系統開發中,常常用到交叉編譯的GCC工具鏈有兩種:
arm-linux-*和 arm-elf-*,兩者區別主要在於使用不同的C庫文件。arm-linux-*使用
GNU的Glibc,而arm-elf-*一般使用 uClibc/uC-libc或者使用REDHAT專門為嵌入式系統
的開發的C庫newlib.Glibc。uClibc/uC-libc以及 newlib都是C語言庫文件,只是所應
用的領域不同而已,Glibc是針對PC開發的,uClibc/uC-libc是與Glibc API兼容的小型
化C語言庫,實現了Glibc部分功能。

關於uClibc/uC-libc的說明,詳見如下:

There are two libc libraries commonly used with uClinux. uC-libc and
uClibc. They are quite different despite their similar names. Here is a
quick overview of how they are different.

uC-libc is the original library for uClinux. It was based on sources
from the Linux-8086 C library which was part of the ELKs project with m68000
support added by Jeff Dionne and Kenneth Albanowski. It is a fairly complete
libc implementation, however, some of the API's are a little non-standard
and quite a few common libc routines are not present. Currently it has
stable support for m68000, ColdFire and ARM (Non-MMU) architectures. It was
primary design goal is to be small and light weight. It does try to conform
to any standards, although its API tries to be compatible with most libcs,
it is not always exactly the same.

The uClinux distribution provides an environment that can compile using
either uC-libc or uClibc depending on your needs. For m68000 and Coldfire
platforms it is generally better to chose uC-libc as it supports shared
libraries and is the most commonly used libc for these CPUs. uClibc also
works quite well with almost all platforms supported by the distribution.
Which libc you choose to use will be decided by your requirements

uClinux有兩個經常使用的libc庫:uC-libc和uClibc。雖然兩者名字很相似,其實有差
別,下面就簡單的介紹一下二者的不同之處。uC -libc是最早為uClinux開發的庫,是
Jeff Dionne和Kenneth Albanowski為在EKLs項目中支持m68000在Linux-8086 C庫源碼
上移植的。uC-libc是一個完全的libc實現,但其中有一些api是非標準的,有些libc的
標准也沒有實現。uC-libc穩定地支持 m68000,ColdFire和沒有MMU的ARM。其主要設計
目標是「小」、"輕",並盡量與標准一致,雖然它的API和很多libc兼容,但是似乎並
不像它期望的那樣和所有標准一致。

uClibc就是為了解決這個問題從uC-libc中發展出來的。它的所有API都是標準的(正確
的返回類型,參數等等),它彌補了uC-libc中沒有實現的libc標准,現在已經被移植到
多種架構中。一般來講,它盡量兼容glibc以便使應用程序用uClibc改寫變的容易。
uClibc能夠在標準的 VM linux和uClinux上面使用。為了應用程序的簡潔,它甚至可以
在許多支持MMU的平台上被編譯成共享庫。Erik Anderson在uClibc背後做了很多的工
作。uClibc支持許多系列的處理器:m68000,Coldfire,ARM,MIPS,v850, x86,
i960,Sparc,SuperH,Alpha,PowerPC和Hitachi 8。不斷增加的平台支持顯示uClibc
能夠很容易的適應新的架構。uClinux發行版提供了環境能夠讓你選擇使用uC-libc或是
uClibc編譯。對於m68000和Coldfire平台來說,選擇uC-libc還是稍微好一點,因為它
支持共享庫,而共享庫是這些cpu經常使用的 libc.uClibc也幾乎和所有的平台都能很
好的工作。選擇哪種libc取決於你的需求。

newlib 是一個用於嵌入式系統的開放源代碼的C語言程序庫,由libc和libm兩個庫組
成,特點是輕量級,速度快,可移植到很多CPU結構上。newlib實現了許多復雜的功
能,包括字元串支持,浮點運算,內存分配(如malloc)和I/O流函數(printf,fprinf()
等等)。其中libc提供了c 語言庫的實現,而libm提供了浮點運算支持。

在為ARM交叉編譯gcc編譯器時,對gcc指定不同的配置選項時,使用的C語言庫就不同,
gcc編譯器默認使用Glibc,也可以使用 uClibc/uC-libc(基本兼容Glibc API),當使用
--with-newlib時,gcc編譯器不使用Glibc。當沒有交叉編譯Glibc時,可以使用
--with-newlib禁止連接Glibc而編譯bootstrap gcc編譯器。從gcc源目錄下的
config/arm中的t-linux和t-arm-elf中可以看出,不同的--target也影響gcc連接C語言
庫,t-linux(--target=arm-linux)默認使用Glibc,-arm-elf(--target=arm-elf)使用
- Dinhibit_libc禁止連接Glibc,這時我們就可以使用newlib等其他C語言庫編譯GCC工
具鏈。

雖然GCC工具鏈配置了不同的的C語言庫,但由於這些C語言庫都可以用來支持GCC,它們
對核心數據的處理上不存在較大出入。因而arm-linux-* 和 arm-elf-*區別主要表現在
C語言庫的實現上,例如不同系統調用,不同的函數集實現,不同的ABI\啟動代碼以及
不同系統特性等微小的差別。

arm-linux-*和 arm-elf-*的使用沒有一個絕對的標准,排除不同庫實現的差異,gcc可
以編譯任何系統。arm-linux-*和 arm-elf-*都可以用來編譯裸機程序和操作系統,只
是在遵循下面的描述時系統程序顯得更加協調:

arm-linux-*針對運行linux的ARM機器,其依賴於指定的C語言庫Glibc,因為同樣使用
Glibc的linux而使得arm-linux-*在運行linux的ARM機器上編譯顯得更加和諧。

arm-elf-*則是一個獨立的編譯體系,不依賴於指定的C語言庫Glibc,可以使用newlib
等其他C語言庫,不要求操作系統支持,當其使用為嵌入式系統而設計的一些輕巧的C語
言庫時編譯裸機程序(沒有linux等大型操作系統的程序),如監控程序,bootloader等

能使得系統程序更加小巧快捷。

Linaro prebuilt toolchain does support both hard and soft floating
point. You can get it from https://launchpad.net/linaro-toolchain-binaries/+milestone/2012.08 try: ./arm-linux-gnueabihf-gcc -print-multi-lib

The default configure is --with-arch=armv7-a --with-tune=cortex-a9
--with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb

To use soft floating, you need options: -marm -march=armv4t -mfloat-abi=soft.

In your case, please try to change -march=armv5 to "-march=armv4t"

If you want to change to configure to cortex-a8 and armv5. You need
* Change cortex-a9 to cortex-a8 in
samples/linaro-arm-linux-gnueabihf/crosstool.config
* Change armv4t to armv5 in
contrib/linaro/patches/gcc/linaro-4.7-2012.08/multilib.patch,

Then follow the instructions to rebuild the toolchain
(contrib/linaro/doc/README.txt)

BTW: crosstool-ng-linaro does not support multilib for eglibc. It uses
the prebuilt sysroot from Ubuntu Precise. If it does not work for you,
please use the latest crosstool-ng from http://crosstool-ng.org/.

F. 如何安裝arm-linux-gcc

1、首先以root用戶登入2、復制arm-linux-gcc-4.3.2.tgz到根目錄下tmp文件夾里
3、解壓命令tar xvzf arm-linux-gcc-4.3.2 -C /
注意以上命令必須要有-C而且是大寫,後邊有個空格也要注意。
4、配置下編譯環境路徑 在控制台下輸入 gedit /root/.bashrc 等一會出來文本編輯器後在文件最後(最後一行)加上下面代碼。
export PATH=/usr/local/arm/4.3.2/bin:$PATH
保存關閉後,注銷當前用戶,用root賬號重新登錄系統(使剛剛添加的環境變數生效)。
此時可以在控制台輸入: arm-linux-gcc -v 如果安裝成功將會輸出 arm-linux-gcc的版本號。

若想讓它在非超級用戶下使用那。首先,以非超級用戶登入。
1、 輸入命令:vi ~/.bashrc編輯.bashrc文件,在文件末尾加入如上面的內容
export PATH=/usr/local/arm/4.3.2/bin:$PATH

2、輸入命令:gedit /etc/profile
在文件的末尾加上:PATH=/usr/local/arm/4.3.2/bin:$PATH
保存對profile的修改後,執行source /etc/profile就OK了,好了通樣先注銷當前用戶再登錄後進入控制台執行arm-linux-gcc -v 看看能否執行成功就可以了。

熱點內容
安卓移機蘋果怎麼操作 發布:2025-09-19 01:58:55 瀏覽:159
我的世界國際版伺服器地址名稱 發布:2025-09-19 01:52:24 瀏覽:331
河北智慧黨建密碼是多少 發布:2025-09-19 01:51:08 瀏覽:657
winform反編譯 發布:2025-09-19 01:43:48 瀏覽:917
c語言中怎麼賦值 發布:2025-09-19 01:17:43 瀏覽:958
公網伺服器如何共享ip 發布:2025-09-19 01:03:43 瀏覽:238
存儲器已幾乎滿 發布:2025-09-19 00:36:28 瀏覽:885
安卓系統在哪裡輸入網址 發布:2025-09-19 00:35:46 瀏覽:175
armlinuxgccgcc 發布:2025-09-19 00:35:37 瀏覽:427
wincachephp 發布:2025-09-19 00:30:28 瀏覽:867