Android系统如何运行动态编译的程序
2015-03-22 21:58
309 查看
android系统底层使用了linux的内核,但在文件系统上与linux有所差异。我们可以通过谷歌提供的ADB工具进入android系统的linux命令终端。但是不能执行我们在PC上通过arm-linux-gcc等交叉编译器动态编译出来的应用程序,比如如下指令:
然后用adb push将可执行程序复制到android系统/data/local中,接着改变权限:
最后进入/data/local目录执行应用程序:
会提示如下:
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。
解压
然后复制lib里面的所有内容到android的/lib目录下:
这时候,linux里的库文件就可以在android中找到了。这时候回到android系统的/data/local目录,再次执行即可执行静态编译的文件了。
另外,如果在linux系统下,我们可以通过配置环境变量或者将mc可执行文件放到/bin目录下,这样可以在任何路径下执行这个命令。那么在android系统中有没有类似操作呢?当然是可以的,我们将可执行文件mc放在/system/bin目录下即可,是不是很方便呢?
大家如果还有什么疑问可以在下面留言,大家共同探讨~~
[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目录下即可,是不是很方便呢?
大家如果还有什么疑问可以在下面留言,大家共同探讨~~
相关文章推荐
- 如何在Windows下使用Linux系统来编译和运行程序?
- Android中如何编译运行系统自带桌面Launcher2源码
- 如何将arm-linux-gcc编译的动态链接helloworld在Android上运行
- 如何让32位编译的程序在64位系统中正常运行
- Android中如何编译运行系统自带桌面Launcher2源码
- 如何编译运行Android系统自带桌面Launcher2源码
- 编译一个可以在Android系统上运行的可执行程序
- 如何在Android系统启动后自动运行程序 [
- 如何在android系统上运行C语言的程序
- 如何编译能在android上运行的C程序
- VC新版本编译的程序如何在老系统上运行
- Unity引擎编译后的程序是如何运行在iOS和Android上
- Delphi编写系统服务四:如何限制系统服务和桌面程序只运行一个
- 如何在程序运行中动态改变对象属性在PropertyGrid可见性和只读属性
- Delphi编写系统服务四:如何限制系统服务和桌面程序只运行一个
- [VB.NET]VB.net有窗体程序如何以系统服务方式运行?
- 如何使KDE下面gksudo运行的程序变得和系统的Theme一致
- VS2005编译的程序在XP系统下不能运行的解决办法
- 如何检测系统是否已经运行了相同的程序
- 借助交叉编译用C编译Android上运行的程序