Android系统如何运行动态编译的程序

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目录下即可,是不是很方便呢?

大家如果还有什么疑问可以在下面留言,大家共同探讨~~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。