解决:/system/bin/sh: ./hello: No such file or directory

android中执行C可执行文件时,出现/system/bin/sh: ./hello: No such file or directory 错误。

1. 问题:

msm8909w:/data # ./hello
/system/bin/sh: ./hello: No such file or directory

2. 解决方法 1:
使用静态链接库:在最后加上-static

arm-linux-gnueabihf-gcc hello.c -o hello -static

3. 解决方法 2:
将linux的C动态链接库复制到android系统中的/lib目录下。因为/lib里面有很多链接,所以不能直接复制文件,要压缩后再复制,再解压,保证链接也一起被复制。
1). 在所用的arm-linux交叉编译工具中找到ld-linux-armhf.so.3所在的/lib目录
我目录是:
home/ubuntu/Public/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib
在这里插入图片描述
2). 将其压缩。试了压缩成lib.tar,在安装系统中解压不了。用.tar.bz2格式可以解压:

 tar jcvf lib.tar.bz2 lib

3). 重新挂载文件系统为可读写

mount -o rw,remount /

4).将lib.tar.bz2用android系统的根目录

adb push lib.tar.bz2 /

5). 解压

tar jxvf lib.tar.bz2

在这里插入图片描述

6). 查看链接是否有

ls -l 

在这里插入图片描述

7). 一切准备好了,执行hello

msm8909w:/ # cd data
msm8909w:/data # ./hello
Hello World!
msm8909w:/data #

3. debug过程:
查看hello动态链接器路径:
输入命令

msm8909w:/data # file hello
hello: ELF shared object, 32-bit LSB arm, dynamic (/lib/ld-linux-armhf.so.3), BuildID=e8f27306e68a08e256aaff15db40859d94b65e53, not stripped

android系统的动态链接器与hello程序的动态链接器的路径不一样(安卓和普通linux的根文件目录不一样):
android系统的动态链接器路径:msm8909w:/system/lib
普通linux的动态链接器路径:/lib

参考:https://www.jianshu.com/p/ac9911eb7958?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值