zoukankan      html  css  js  c++  java
  • 交叉编译环境以及开发板上-/bin/sh: ./hello: not found 转载自 http://blankboy.72pines.com

    交叉编译环境以及开发板上-/bin/sh: ./hello: not found

    目标板是S3C2440.至于交叉编译环境的搭建就不多说了,网上很多教程.

    搭建好了交叉编译环境后,第一件事就是传说中的”Hello,World!”.

    一. 主机编译环节

    我使用的系统是ubuntu10.04,搭建好交叉编译环境后,终端输入arm-linux-gcc -v能够正常显示版本信息,但是输入sudo arm-linux-gcc -v后却显示命令无法找到.

    我试过很多种方法,比如sudo -s切换到root后,编辑$PATH,将编译器路径加入.然后exit到普通用户.仍然不能执行sudo arm-linux-gcc -v. 这里如果哪位大牛知道是什么原因的可以留言告诉我,谢谢:)

    由于编译.c的文件后,要产生新的文件,因此要super的权限.又不能使用sudo arm-linux-gcc,于是可以先sudo -s到root用户,再使用arm-liunux-gcc来进行编译.

    二. 目标板执行环节

    我是使用FTP在主机和目标板之间传送文件.传送过去后要注意改变权限.

    这里要注意几点:

    1. 要确定ftp过来后的文件的默认的存放路径.这个只要在目标机的终端机上确认下即可.(这个地方没有确认可能就会显示找不到命令)

    2. 传送过来的文件要更改权限才能运行.可以用:

    chmod 777 hello

    chmod +x hello

    3. 执行./hello

    这时,报错:-/bin/sh: ./hello: not found

    三. 问题排除

    用过绝对路径也试过之后就确定并不是文件是否存在的问题,而是这个文件并不能被执行.

    GOOGLE之后可以发现,排除上面提到问题后,就将问题定位到动态链接库上.

    于是在主机上用arm-linux-gcc -static -o 来进行静态编译.然后将新产生的文件传到目标板上.可以发现通过静态编译的文件明显比动态编译的要大.

    然后再次执行./hello  可以看到屏幕上出现了久违的Hello,World!

    问题到这里还没有完,我们可以再思考下怎么彻底解决,而不是每次都使用静态编译.

    既然是动态库引起的问题,那么应该和编译器的版本有关.在安装编译环境的时候同时安装了3.4.1和4.3.3两个版本.用户手册上说其中3.4.1是用来编译u-boot的,4.3.3版本是用来编译Linux内核和Qtipia的,两个版本均可以用来编译应用程序.

    既然我们的内核使用4.3.3编译的,而我们刚才编译hello是使用3.4.1编译的,那么会不会是这个原因呢?

    于是我们试一下,将$PATH中的原来包含3.4.1/bin 的路径改为 4.4.3/bin . 修改的方法网上有很多.(直接export PATH=”想要的路径”)

    再次编译,下载.

    目标板上执行,成功显示”Hello,World!”.

    可以看到系统中动态库的支持和编译器还是有关的.

  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/lzjsky/p/3730183.html
Copyright © 2011-2022 走看看