您的位置:首页 > 移动开发 > Android开发

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

2015-03-22 21:58 309 查看
android系统底层使用了linux的内核,但在文件系统上与linux有所差异。我们可以通过谷歌提供的ADB工具进入android系统的linux命令终端。但是不能执行我们在PC上通过arm-linux-gcc等交叉编译器动态编译出来的应用程序,比如如下指令:

[code]arm-linux-gcc mc.c -o mc


然后用adb push将可执行程序复制到android系统/data/local中,接着改变权限:

[code]adb shell chmod 777 /data/local/mc


最后进入/data/local目录执行应用程序:

[code]./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。

解压

[code]tar xzvf file_system.tar.gz


然后复制lib里面的所有内容到android的/lib目录下:

[code]adb push lib /lib


这时候,linux里的库文件就可以在android中找到了。这时候回到android系统的/data/local目录,再次执行即可执行静态编译的文件了。

另外,如果在linux系统下,我们可以通过配置环境变量或者将mc可执行文件放到/bin目录下,这样可以在任何路径下执行这个命令。那么在android系统中有没有类似操作呢?当然是可以的,我们将可执行文件mc放在/system/bin目录下即可,是不是很方便呢?

大家如果还有什么疑问可以在下面留言,大家共同探讨~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: