交叉编译环境以及开发板上-/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!”.

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

交叉编译环境以及开发板上-/bin/sh: ./hello: not found 转载自 http://blankboy.72pines.com的更多相关文章

  1. 交叉编译环境以及开发板上-/bin/sh: ./hello: not found(使用arm-linux-gcc -static -o 来进行静态编译)

    目标板是S3C2440.至于交叉编译环境的搭建就不多说了,网上很多教程. 搭建好了交叉编译环境后,第一件事就是传说中的”Hello,World!”. 一. 主机编译环节 我使用的系统是ubuntu10 ...

  2. Arm开发板+Qt学习之路-开发板显示 /bin/sh: ./hello: Permission denied

    将pc上交叉编译完成的可执行文件hello,通过串口传输到开发板上后,执行./hello显示 /bin/sh: ./hello: Permission denied 解决方案:在开发板上执行  chm ...

  3. FS210开发板上Qt4.7.0移植过程

    作者:冯老师,华清远见嵌入式学院讲师. 1. 搭建Qt开发环境平台 1.开发环境:ubuntu 12.04 2.交叉编译链:arm-cortex_a8-linux-gnueabi 3.开发板:FS21 ...

  4. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  5. easycwmp在开发板上的配置

    原创作品,转载请注明出处 copyright:weishusheng   2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...

  6. 使用Xilinx SDSoc在Xilinx zcu102开发板上编程HelloWorld

    关于Xilinx SDSoc的介绍我就不再复述了,我理解的也不一定准确,可以阅读官方文档了解SDSoc,你可以把它理解为一个集成开发环境 (IDE),通过SDSoc我们能够简单快速的对Xilinx的开 ...

  7. dmalloc在嵌入式的开发板上的应用

    下面是我实际在开发环境里面做的dmalloc移植时候的一些随笔 配置PC的dmalloc环境1. 首先把源码包打开,进入dmalloc文件夹2. ./configure 配置Makefile,我是加了 ...

  8. python调用c++/c 共享库,开发板上编译的一些坑!

    1.对于python,ctypes只能load动态库,但现在我的对象是一个静态库,而且我没有源代码,静态库在编译过程中没有加--fPIC参数,所以我也没办法将其编译为动态库,有没有什么方法在pytho ...

  9. 02.将uboot,kernel,rootfs下载到开发板上

    转载,侵删 将uboot,kernel,rootfs下载到开发板上 1.为什么要下载 所谓下载,也称烧录,部署. 1.1.什么是u-boot Hi3518EV200 单板的 Bootloader 采用 ...

随机推荐

  1. 类型“System.Data.SQLite.SQLiteParameter”在未被引用的程序集中定义。必须添加对程序集“System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”的引用

    出现这个问题是 你的系统是64位 同时 dll生成的 any cpu 应该换为 x86

  2. ios中键盘处理适合ipad 和iphone

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UI ...

  3. spring下Junit_jdbc回滚demo

    配置测试类 添加如下内容在class前,用于配置applicationContext.xml文件的位置. @RunWith(SpringJUnit4ClassRunner.class) @Contex ...

  4. Ubuntu 12.04安装VMware Workstation8.0.3

    2012-06-18 12:52   Ubuntu安装VMware Workstation8.0.3   由于使用Ubuntu的人比较少,网上关于Ubuntu的资料也很少,笔者在安装VMware Wo ...

  5. [转]TensorFlow---岂止深度学习

    原文链接 TensorFlow不仅可以用于深度学习自动求导,它也可用于构建传统机器学习和经典算法. TensorFlow提供了"一揽子"常用数值计算和机器学习算法的构建模块.在本文 ...

  6. 如何解决 yum安装出现This system is not registered with RHN

    [root@localhost ~]# yum install libtool Loaded plugins: rhnplugin, security This system is not regis ...

  7. CentOS 7 systemd的坑

    一.概述 在从 CentOS 6 迁移到 CentOS 7 的过程中,可能有一些地方需要调整,最显著的地方莫过于 systemd 带来的改变,不同的管理服务的方式,不同的日志方式,设置时区,时间等等. ...

  8. Entity Framework中实体模型命名空间的问题

    在添加一个实体数据模型的时候(就是扩展名为edmx那位)属性里明明设置了自己的命名空间,但是后台的Designer.cs命名空间生成规则却是项目的默认命名空间加edmx文件所在文件夹的名称, 是BUG ...

  9. 【jsp】配置错误页面

    1,使用JSP方式 如果配置是Jsp时,需要把isErrorPage设置为true, 以及设置 <%@ page language="Java" contentType=&q ...

  10. php非阻塞服务器

    <?php class PHPSocketServer { const ERROR = 0; const LOG = 1; const DEBUG = 2; private $aConfig = ...