-/bin/sh: not found 的问题解决
(2013-01-23 17:02:06)| 分类: config_debug |
执行某一条可执行命令x,结果出现-/bin/sh: x not found提示,一般表示其缺少足够的共享库来运行这条命令。解决方法有两条:
1、编译这条命令时添加使用-static选项,这条选项会将所需要的库都一起静态编译到这条命令中,这样的好处在于无论在任何环境下,只要架构相同就都可以运行这条命令,缺点则有3:
(1)由于包含库,文件也就会变得比较大,最关键是很多不需要的东西也被编入其中
(2)没有办法合理使用共享库,共享库的作用就是让各命令都能使用,同时如果库升级只需要更新相应的库连接就可以,对于大型应用来说显然这样的方式更优,这也是最主要的缺点
(3)对于一些买来的加密的库,是无法用静态编入程序的
2、既然提到上述缺点,那么好的解决方法就是添加相应的库了
可以使用readelf命令:readelf -d x | grep NEED,
例如:unicore32-linux-readelf -d hx170dec_versatile | grep
NEED
显示出需要的库为libpthread.so.0,libc.so.6,将这两个库拷贝入/lib下即可
同样需要注意两点:
(1)依赖库所需要的库是不会显示出来的,在运行时还会提示缺少某库,需要再次加入,这也是该方法唯一的缺点
(2)拷贝共享库时一般会有一个软连接,然后连接指向实际库,例如libc.so是一个软连接,实际指向libc.so.6,这样便于库的更新,更改软连接即可。拷贝时注意直接使用cp会把链接的实际内容拷贝过来,需要加上-l选项。
事实上直接用vim打开文件,搜索.so一样可以找到需要的库,不过其他很多乱码,稍显不专业罢了
.so的意思就是shared object,现在的计算机科学重在分享,所以用好共享库吧~~

加载中…