交叉编译环境以及ARM开发板上-/bin/sh: ./hello: not found
2017-09-03 19:10
405 查看
转自:http://www.cnblogs.com/lzjsky/p/3730183.html
目标板是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 hellochmod +x hello3. 执行./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!”.可以看到系统中动态库的支持和编译器还是有关的.四. 动态编译和静态编译的区别 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。 静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。(转自:http://blog.csdn.NET/wuan584974722/article/details/7953213)
目标板是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 hellochmod +x hello3. 执行./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!”.可以看到系统中动态库的支持和编译器还是有关的.四. 动态编译和静态编译的区别 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。 静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。(转自:http://blog.csdn.NET/wuan584974722/article/details/7953213)
相关文章推荐
- 交叉编译环境以及ARM开发板上-/bin/sh: ./hello: not found
- 交叉编译环境以及开发板上-/bin/sh: ./hello: not found 转载自 http://blankboy.72pines.com
- 交叉编译环境以及开发板上-/bin/sh: ./hello: not found(使用arm-linux-gcc -static -o 来进行静态编译)
- 交叉编译环境以及开发板上-/bin/sh: ./hello: not found 转载自 http://blankboy.72pines.com
- 交叉编译环境以及开发板上-/bin/sh: ./hello: not found
- mips交叉编译环境出现/bin/sh: 1: /bin/gawk/: not found
- 交叉编译错误make: arm-none-linux-gnueabi-gcc:命令未找到 /bin/sh: 1: arm-none-linux-gnueabi-gcc: not found问题解决
- ubuntu12.04 64建立交叉编译环境,bin/.arm-none-linux-gnueabi-gcc: not found(安装 ia32-libs)
- ubuntu12.04建立交叉编译环境,bin/.arm-none-linux-gnueabi-gcc: not found
- 交叉编译:/bin/sh not found 解决办法
- 交叉编译boa后在开发板运行boa出现-/bin/sh: boa: not found 错误的解决方法
- Centos7.0 64位编译安装Nachos4.1 32位以及搭建交叉编译环境从尝试到放弃系列(一)
- 【转】Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境
- Qt Designer快速开发交叉编译环境以及mini2440界面窗体
- 【error->编译环境】sh: 1: python: not found
- 编译错误: /bin/sh: 1: pushd: not found的问题
- raspberry 3b 64bit 系统安装,以及交叉编译环境、调试环境的搭建
- bin/sh: hello :not found -sh: ./hello: not found
- 【教程】在Ubuntu下搭建ARM处理器 arm-linux-gcc 交叉编译环境以及OpenJTAG + openocd 烧写环境
- arm开发板运行应用程序出现:-/bin/sh:xxx:not found 解决办法