出错现象:
在交叉编译过程中注意:安卓模拟器的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!