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

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

执行命令之后,搜索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!

 

你可能感兴趣的:(嵌入式,android,开发,ubuntu,linux,x86,so库,no,such,file)