Ubuntu16.04解决交叉编译生成的二进制文件,在卓模拟器上执行./a.out文件报错:/system/bin/sh: ./a.out: No such file or directory

出错现象:

在交叉编译过程中注意:安卓模拟器的cpu架构一般是x86或x86_64类型, 安卓真机应该都是arm架构。架构不同编译不同。

环境: 

电脑系统:Ubuntu 16.04 64位, x86_64架构
安卓模拟器: Android 4.2 32位 x86架构

1. Ubuntu 上使用 32位编译

chenfan@ubuntu:~/work/git$ gcc main.c -lpthread -m32

2. 查看a.out 的执行中需要so库 

chenfan@ubuntu:~/work/git$ readelf -a a.out

执行命令之后,搜索Requesting关键词,找到需要/lib/ld-linux.so.2库文件。

3. 找Ubuntu系统上的ld-linux.so.2文件,拷贝i386目录下的,因为安卓模拟器是x86架构的。

chenfan@ubuntu:~/work/git$ sudo find / -name "ld-linux.so.2" 

4. 将ld-linux.so.2 放到安卓模拟器上的/lib/目录中,一般需要新建lib目录。(如果需要read-only 系统提示问题,需要root权限下载执行mount -o rw,remount /)

chenfan@ubuntu:~/work/git$ adb shell mkdir lib    // 创建lib目录, 因为Requesting中是在lib目录下,需要保持一致
chenfan@ubuntu:~/work/git$ adb push /lib/i386-linux-gnu/ld-linux.so.2 /lib    // 上传so库
chenfan@ubuntu:~/work/git$ adb push a.out /                                // 上传可执行文件

5. 连接到安卓模拟器终端,运行二进制文件

root@android:/ # chmod u+x a.out
root@android:/ # ./a.out
hello world!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Macle_Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值