关于-/bin/sh: 命令:not found的解决办法

原文: http://blog.chinaunix.net/uid-20539088-id-115759.html

关于mini2440上-/bin/sh: 命令:not found的解决办法

我按照mini2440的移植手册移植了linux内核和文件系统不同的是我用的交叉编译器是最新的4.4.1而没有用天嵌科技提供的交叉编译器,当我移植好了yaffs文件系统,想写个helloworld程序在开发板上测试下,我把编译好的helloworld文件放到yaffs文件系统的/usr/bin目录下,但当我运行/usr/bin/helloworld命令是提示“-/bin/sh: /usr/bin/helloworld: not found”,一开始我以为是helloworld没有运行权限,不过我给了它运行权限还是提示同样的错误。我在网上搜了下找到了原因:只所以提示“-/bin/sh: /usr/bin/helloworld: not found”这个,是因为我没有拷helloworld所需的库文件。那怎么才能知道helloworld需要哪些库文件呢,可以这样,在命令行输入arm-linux-readelf -a helloworld 命令然后在输出的内容中找到Program Headers:节这里就有helloworld所需的库文件(关于readelf可以参考这里< http://blog.csdn.net/eroswang/archive/2007/12/25/1967243.aspx>)如下图:
读者注: ($arm-linux-readelf -a helloworld | grep -A 20 "Program Headers" )
使用这个命令,定位更快。其中grep -A 20 表示打印匹配行后面20内容。

 
     看来我们需要ld-linux.so.3这个库,在你的交叉编译器中找到这个库文件把它拷到我们文件系统的/lib目录中然后烧到开发板中再次运行/usr/bin/helloworld结果提示“/usr/bin/helloworld: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory”有效果了,最起码不是前一个错误提示了,这就证明方法对头,我们看一下上面的错误这次直接提示所需的库文件了,我们按提示把libgcc_s.so.1拷到文件系统的/lib中,然后再次运行,又提示“/usr/bin/helloworld: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory”还是少库文件,我们再把这个也拷到文件系统的/lib中,这次总算是行了,终于看到“hello world”。
参考文章:< http://www.cnblogs.com/nick123/archive/2009/12/01/1614919.html>


====================================分割线=======================================

我遇到这个问题了,但是我记得之前已经将需要的库文件、连接器都已将拷贝好了,但是还是提示同样的问题

后来发现我拷贝的是3.4.5(韦东山)里面的库文件和连接器,而我后来些的字符设备测试程序使用4.4.3(mini2440)编译的,它们编译出来依赖的库不一样,so.....

我又重新用3.4.5版本的编译器重新编译了测试程序,然后就成功了。

注:我自己的交叉编译工具的PATH在/etc/profile文件中定义,修改后输入命令:$source /etc/profile 使得更改立即对当前shell生效,注意是当前shell,如果你更改之后没经历过重启,那么每次打开一个shell都要source 一下才能生效哦,这个要注意。




你可能感兴趣的:(关于-/bin/sh: 命令:not found的解决办法)