zoukankan      html  css  js  c++  java
  • 解决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变量的时候遵循一定的规则,这样才能更好地避免出错
  • 相关阅读:
    0841. Keys and Rooms (M)
    0478. Generate Random Point in a Circle (M)
    0714. Best Time to Buy and Sell Stock with Transaction Fee (M)
    0535. Encode and Decode TinyURL (M)
    1721. Swapping Nodes in a Linked List (M)
    0823. Binary Trees With Factors (M)
    1461. Check If a String Contains All Binary Codes of Size K (M)
    0623. Add One Row to Tree (M)
    1332. Remove Palindromic Subsequences (E)
    0706. Design HashMap (E)
  • 原文地址:https://www.cnblogs.com/water-moon/p/5983152.html
Copyright © 2011-2022 走看看