解決strip: Unable to recognise the format of the input file問題


前言
 
在編譯xilinx的uboot的時候出現了一個問題,始終報錯:“strip: Unable to recognise the format of the input file `gen_eth_addr'”
 
1 分析
 
一般對於編譯鏈接命令出現這樣的錯誤,都是因為目標文件和命令的編譯環境不一樣導致的,但是我看了一下對於這個目標文件gen_eth_addr,使用的gcc進行編譯的啊,為什么strip就不會認識呢?
在第一反應中,gcc/strip都應該是使用的系統安裝是/usr/bin中指定的命令,對於這兩個命令的環境應該是一樣的,所以我多次嘗試都不對,所以我覺得肯定是bash在調用gcc/strip命令時路徑出現了問題。
使用 type命令查看gcc和strip使用的路徑:

root@~:type gcc

gcc is /usr/bin/gcc
root@~:type strip
strip is /home/timesys/linux-gnu/toolchain/bin/strip
果然gcc/strip使用的不是同一個編譯環境,問題就處在這里,下面就是找為什么會這樣和解決問題了。
查看環境變量看指定的PATH路徑:
在這里我們果然看到一個問題:/usr/../bin等並不是在PATH的最前面,而我們知道shell執行命令的順序是:shell內建命令-->外部命令(外部命令查找本地目錄-->PATH指定的路徑),而PATH指定的路徑下越靠前的優先級越高。
所以這里我們看到/home/timesys/linux-gnu/toolchain/bin比/usr/bin/靠前,而且/home/timesys/linux-gnu/toolchain/bin中有strip命令,所以就被執行了。
 
由此,問題原因找到,就是由於PATH中的順序導致的查找命令混亂,下面就是修改PATH的值了。
 
2 解決
 
PATH是屬於環境變量,我們直接跟蹤bash使用的腳本一步一步查找即可。
首先,bash啟動時調用的文件是~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
 
# User specific environment and startup programs
 
PATH=$HOME/bin :$PATH
 
export PATH
unset USERNAME
 
# New environment setting added by Sourcery CodeBench Lite for Xilinx GNU/Linux on Fri Feb 27 14:52:15 CST 2015 1.
# The unmodified version of this file is saved in /root/.bash_profile1216857457.
# Do NOT modify these lines; they are used to uninstall.
PATH="/home/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin:${PATH}" 
export PATH
# End comments by InstallAnywhere on Fri Feb 27 14:52:15 CST 2015 1.
 
# For Mips GNU/Linux
PATH="/home/timesys/linux-gnu/toolchain/bin:/home/timesys/linux-uclibc/toolchain/bin:${PATH}" 
export PATH
我們將${PATH}均放到最前面,如下;
然后這里還調用了~/.bashrc,我們也去看一下:
這里引用了/etc/bashrc,也去看一下:
 
確保這里所有的PATH都是這樣${PATH}在前面。
再看/etc/profile
在這個文件中出現的PATH也要改成統一的格式。
 
修改完這些文件,然后 source,然后再看PATH的值:
OK,這就是我們需要的了,然后編譯uboot順利通過
 
3 總結
 
由於我這個虛擬機是前任裝的,所以里面的一些配置不合符自己平時的習慣,所以導致了一些開始認為不應該出現的問題;但出現了問題就應該找到原因並解決。同時對於在一個虛擬機中安裝多個交叉編譯環境來說,我們在使用的時候一定要注意命令的調用路徑,在配置PATH變量的時候遵循一定的規則,這樣才能更好地避免出錯


免責聲明!

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



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