當前位置:首頁 » 編程軟體 » softfloat交叉編譯器怎麼設置

softfloat交叉編譯器怎麼設置

發布時間: 2025-01-26 19:33:16

Ⅰ arm-linux-gcc4.4.3怎麼安裝

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已成功安裝。

Ⅱ 交叉編譯工具鏈 arm-arago-linux-gnueabi-gcc 中的arago和gnueabi代表什麼意思

arm-arago-linux-gnueabi-gcc
arm :CPU Architecture
arago: Hardware Platform or Vendor
linux:Operating System
gnueabi: C Library

arago 那個段落,表示的是供應商,對於 arm 這里也可以是 hardfloat 或者 softfloat ,也就是使用的是硬浮點還是軟浮點。當然其實這個東西是在編譯 gcc 時,通過 --with-float= 指定而不是通過這里進行識別蘆州。但有的時候,一些編譯腳本會識別這里來確定浮點運算器是軟是硬。

gnueabi 是 C 函數庫的使用,比如 gnu 是 GNU C Library ,也就是 glibc 。對應的還有 uclibc 。附加的 eabi 其實是說,使用的是新的 EABI 二進制介面 Embedded application binary interface 。這個嵌入式專用介面比老的更好用,效率更高而且支持新的一些硬體功能。碼伍老的教 OABI 。當然,同 float 一樣可以通過參數直接定義。

這一大堆聯合起來,只是為了直觀的表現並且區別使用用途和功能定義。沒有必陪模蔽要太過於關注。

Ⅲ 求大俠指教 我往TQ2440開發板上移植Uboot遇到了問題 編譯沒沒出錯 但放到內存中總是運行不出來 情況如下:

請問樓主是將u-boot移植到nandflash中通過代碼往內存搬運,還是直接移植到內存中進行執行。如果是直接往內存移植,需要一個init.bin文件燒寫到nandflash的前4k進行內存初始化,才可以在內存中執行,從你的截圖看不像是燒寫到nandflash中的,如果需要幫助我可以給你QQ,我們私聊

Ⅳ 交叉編譯busybox顯示libc.so.6丟失!

拷貝C 庫
交叉應用程序的開發需要用到交叉編譯的鏈接庫,我們在移植應用程序到我們的目標板的時
候,需要把交叉編譯的鏈接庫也一起移植到目標板上,這里我們用到的交叉工具鏈的路徑是
/usr/local/arm/...../,鏈接庫的目錄是/usr/local/arm/...../arm-linux/lib,將其中部分庫文件及符號鏈接拷貝到root_nfs(你創建的busybox的根目錄)文件夾下的lib文件夾中。
部分庫文件及符號鏈接有:ld-2.3.2.so,ld-linux.so.2,libc-2.3.2.so,libc.so.6

Ⅳ Go 語言交叉編譯在 openwrt 上運行的程序

Go 語言的一大優勢在於其簡便的交叉編譯功能,允許開發者生成適用於不同硬體平台與操作系統的程序。本文將詳細記錄如何在小米路由器 3G 上運行 Go 語言編寫的程序,以供參考。

編譯環境為 macOS 以及 Go 1.11 版本,目標運行環境為基於 OpenWRT 的路由器,其採用 MIPS 架構的 32 位處理器 MT7621,配置雙核四線程,無浮點單元(FPU)。代碼文件命名為 `hello.go`。

編譯過程採用標準的 `go build` 命令,只需通過 `GOOS` 和 `GOARCH` 參數指定目標平台的操作系統與 CPU 架構。由於 MT7621 無 FPU,因此在編譯時需特別指定使用 `softfloat` 軟浮點,以確保程序中不包含浮點計算指令,避免非法指令錯誤。

在較早版本的 Go 需要藉助第三方庫實現 MIPS 平台的交叉編譯,但 Go 1.11 版本已內置了對 MIPS 平台的支持,無需額外依賴。對於無 FPU 的處理器,可以通過在編譯 OpenWRT 時打開內核的浮點模擬器來實現兼容性,但使用 `GOMIPS=softfloat` 指令同樣能夠滿足需求。

編譯完成後,通過 `scp` 命令將生成的可執行文件 `hello` 傳輸至目標平台並運行。程序執行一切正常,已成功在路由器上部署 Go 語言程序。

在編譯過程中遇到的兩個關鍵問題包括:

1. **Go 1.11 版本編譯緩存問題**:在切換 `GOMIPS=softfloat` 與 `hardfloat` 時,編譯結果並未變化,需手動清理緩存以獲取正確的輸出。通過在 GitHub 上查找對應 issue,並確認其已被修復後,更新至 Go 1.11.5 版本,問題得到解決。

2. **GOARCH 參數配置問題**:初始時將 `GOARCH` 設置為 `mips`,即 MIPS 處理器的大端架構,導致編譯出的程序在執行時出現語法錯誤。經調查,`GOARCH` 參數可以設置為 `mips` 或 `mipsle`,分別對應大小端架構。考慮到 MT7621 為小端架構,修正 `GOARCH` 為 `mipsle` 後問題得以解決。

Ⅵ 如何使用自己的makefile編譯android ndk項目

android ndk提供了一套自己的makefile管理方式,要將源碼項目移植到android平台,需要按照android的makefile規則編寫makefile,還要按android的規則部署源碼目錄,對一個有自己的makefile管理方法的大型項目來說,只是做一下makefile遷移工作就是一件很麻煩的事。
其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本為例:
編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名稱前綴 arm-eabi-
頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麼結果?
有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?
只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數
編譯參數:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
鏈接參數:

-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

熱點內容
php網站克隆系統 發布:2025-01-27 15:44:01 瀏覽:107
仿qq界面源碼 發布:2025-01-27 15:35:29 瀏覽:651
java獲取窗口 發布:2025-01-27 15:31:40 瀏覽:277
易語言變速源碼 發布:2025-01-27 15:29:58 瀏覽:398
java自動換行 發布:2025-01-27 15:21:29 瀏覽:41
安卓耳機如何調降噪 發布:2025-01-27 15:10:55 瀏覽:667
linux創建用戶目錄 發布:2025-01-27 14:59:16 瀏覽:159
我的世界變形mod伺服器 發布:2025-01-27 14:53:33 瀏覽:211
通過微信注冊的郵箱密碼是什麼 發布:2025-01-27 14:47:23 瀏覽:437
伺服器多根電源線怎麼算瓦數 發布:2025-01-27 14:45:55 瀏覽:440