解決ubuntu中arm-linux-gcc not found


背景

運行交叉工具鏈卻遇到問題,這種情況一般是在開發搭建環境的時候容易遇到的。

問題與解決

  1. 注意檢查是不是 換了bash的原因
    在Linux中我們經常使用 bash,但是有些人為了提高效率,換成了zsh,但是配置工具鏈的環境變量語句存在於 .bashrc ,與現在使用的shell無關。
    如果是這種情況,在 對應的rc文件 添加環境變量即可。

  2. 權限切換以后環境變量換了
    一般,我們配置環境變量的時候,root環境不會碰到;但是要是萬一不小心切換到了root權限,可能也會有這樣的問題。

  3. 如果遇到環境變量配置以后,能夠找到版本(也就是說 輸入 命令的開頭按tab以后能夠出現補全),如果還有問題,這是因為64位下運行32編譯器缺少相應的庫文件,所以運行時會報錯
./arm-none-eabi-gcc
bash: ./arm-none-eabi-gcc: No such file or directory

那么只需要添加對於 32 位的環境即可:

sudo apt-get install lib32ncurses5 lib32z1

 

arm-linux- 各bin文件的作用

add2line :將你要找的地址轉成文件和行號,它要使用 debug 信息。
ar :產生、修改和解開一個存檔文件
as :gnu的匯編器
c++filt :C++ 和 java 中有一種重載函數,所用的重載函數最后會被編譯轉化成匯編的標,c++filt 就是實現這種反向的轉化,根據標號得到函數名。
gprof :gnu 匯編器預編譯器。
ld :gnu 的連接器
nm :列出目標文件的符號和對應的地址
objcopy :將某種格式的目標文件轉化成另外格式的目標文件
objdump :顯示目標文件的信息
ranlib :為一個存檔文件產生一個索引,並將這個索引存入存檔文件中
readelf :顯示 elf 格式的目標文件的信息
size :顯示目標文件各個節的大小和目標文件的大小
strings :打印出目標文件中可以打印的字符串,有個默認的長度,為4
strip :剝掉目標文件的所有的符號信息
arm-none-linux-gnueabi-cpp : gnu的 C 的預編譯器
arm-none-linux-gnueabi-gcc : gnu的 C 語言編譯器
arm-none-linux-gnueabi-gcc-4.3.5 : gnu的 C 語言編譯器,其實和arm-linux-gcc是一樣的
arm-none-linux-gnueabi-gccbug : 一個可執行腳本,具體作用未知。
arm-none-linux-gnueabi-gcov : gcc 的輔助測試工具,用來分析和優化程序
 
 
我們經常在執行二進制bin程序時,會遇到提示not found/no such file or directory/not executable等錯誤信息,在什么情況下會出現這種問題呢,我們一起羅列下幾種常見的幾種場景:
1.可執行bin程序確實不存在
這個錯誤就比較低級了,你的可執行bin沒有打包或者拷貝進來,執行的時候,自然找不到了
2.可執行bin程序的路徑不對
我們的bin不在$PATH包含的路徑中,無法自動找到,則需要加上完整的路徑執行
 
3.可執行程序bin為動態鏈接,且系統沒有動態加載器
helloworld為動態鏈接,且系統沒有/system/bin/linker
4.交叉編譯器類型不相同
其中hello_world為x86編譯的bin程序,無法在arm架構上運行
 
5.64位的bin程序運行在32位的系統
 
6.可執行程序bin為動態鏈接,缺少依賴的動態庫
 
7.可執行程序bin存在,但是可執行bin為符合鏈接,源文件已經刪除
 
8.可執行成bin存在,為動態鏈接,所依賴的動態庫為符合鏈接,動態庫鏈接的源文件已經刪除
 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM