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

作者: 超低空 | 来源:发表于2015-03-22 21:56 被阅读2045次

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

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

    相关文章

      网友评论

      • 超低空:@八月小羽 可以显示出具体用的linux内核版本, 我的是3.4.10版的内核
      • 八月小羽:手机上显示的内核多少,是不是就是Linux???

      本文标题:Android系统运行动态编译的程序

      本文链接:https://www.haomeiwen.com/subject/rgqgxttx.html