android系统底层使用了linux的内核,但在文件系统上与linux有所差异。我们可以通过谷歌提供的ADB工具进入android系统的linux命令终端。但是不能执行我们在PC上通过arm-linux-gcc等交叉编译器动态编译出来的应用程序,比如如下指令:
arm-linux-gcc mc.c -o mc
然后用adb push将可执行程序复制到android系统/data/local中,接着改变权限:
adb shell chmod 777 /data/local/mc
最后进入/data/local目录执行应用程序:
./mc
会提示如下:
1|root@android:/data/local # ./mc
/system/bin/sh: ./mc: No such file or directory
这就说明系统中找不到所需要的链接库,而如果是在arm-linux系统下,可以顺利执行。这就说明android系统中缺少linux系统中的这些依赖库。当然如果加上-static选项静态编译可以解决问题,不过静态编译出来的文件往往比动态编译出来的文件大几十倍,一个简单的makefile可能会到五百多KB。对于长久来看这是很不划算的。我们可以从linux的文件系统中找到这些库。方法如下:
首先在linux源码中找到文件系统压缩包:file_system.tar.gz。
解压
tar xzvf file_system.tar.gz
然后复制lib里面的所有内容到android的/lib目录下:
adb push lib /lib
这时候,linux里的库文件就可以在android中找到了。这时候回到android系统的/data/local目录,再次执行即可执行静态编译的文件了。
另外,如果在linux系统下,我们可以通过配置环境变量或者将mc可执行文件放到/bin目录下,这样可以在任何路径下执行这个命令。那么在android系统中有没有类似操作呢?当然是可以的,我们将可执行文件mc放在/system/bin目录下即可,是不是很方便呢?
大家如果还有什么疑问可以在下面留言,大家共同探讨~~