如何将Linux中现有的众多资源以最小代价移植到android是很多开发人员关注的,下面这篇文章讲了一个比较取巧的方法,我试验了一下,最基本的hello world可以跑,但是复杂的大型程序要考虑很多问题,thread,IPC,效率等等,还有待验证。

原文地址:

http://groups.google.com/group/android-internals/browse_thread/thread/7c728a36474fbc05

在Android上使用动态链接库的一种新方法 - 不使用android linker

Android使用的Linker和传统Linux使用的linker(ld.so,ld-linux.so.2,ld-linux.so.3)不同,

他的Bionic里面的libdl实际只是一个stub函数,真正的实现都在system/bin/Linker里面。

我认为ld.so针对a.out格式的二进制可执行文件, ld-linux.so.2针对elf格式的二进制可执行文件,

ld-linux.so.3是新一代针对elf格式的二进制可执行文件的Linker,错了的话请纠正。

实际上我试验使用ld-linux.so.3代替android的/system/bin/linker来作为系统动态链接库的

linker。

下面给出一个简单的例子: 
hello.c 
#include 
int main() 

        printf("\n Hello World \n"); 
        return 0;


所用的Toolchain从Code Sourcery得到。使用的是arm gnu/linux系列。

编译方式: 
arm-none-linux-gnueabi-gcc -o hello.out hello.c -Wl,-dynamic-linker=/yourpath/ld-linux.so.3  (不要使用-static使得程序是动态链接)。

然后找到hello.out依赖的动态库,这里给出的列表是我猜的(因为我的cgywin里没有ldd)。 
ld-linux.so.3, 
libgcc_s.so, 
libc.so.6 
(其实用readelf -d也可以找到依赖的动态库。)

我把这些文件从toolchain库(libc/usr/lib)里面找出来然后上传到android emulator的/data/app目录。

然后将hello.out上传到同一个目录后然后改变其权限使其可执行(chmod).然后执行它,

OK !!you can get it!!

因此,所有的程序不管它是否动态链接库还是其他的,如果在host系统toolchain能成功按上面方法编译,那理论上它就可以在android系统上运行。你只需要将程序和相应的动态库上传到合适的目录。

记住最关键的,编译时一定要加上“-Wl,-dynamic-linker=/yourpath/ld-linux.so.3" 。

注意,这里的youpath要和你在android模拟器上执行这个程序时的路径一样,否则会出not found错误。最好把ld-linux.so.3拷贝到编译目录,并且执行时所有文件都在同一个目录。

http://blog.chinaunix.net/uid-223060-id-2215345.html

基于glibc的程序在android上的移植相关推荐

  1. android编译glibc,基于glibc的程序在android上的移植

    如何将Linux中现有的众多资源以最小代价移植到android是很多开发人员关注的,下面这篇文章讲了一个比较取巧的方法,我试验了一下,最基本的hello world可以跑,但是复杂的大型程序要考虑很多 ...

  2. java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览

    详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘  要 本 ...

  3. 微软程序在Android上跑,想在Win 10上运行Android应用?这类手机用户已经可以尝鲜...

    在Win 10上运行Android应用?这听起来有些异想天开,可实实在在的需求却在这里,毕竟微软Windows体系内的无缝切换,离开了手机平台始终有些怪怪的,自然,微软也不会甘心放弃,最好的办法,莫过 ...

  4. ssm基于微信小程序的恋上诗词设计与实现毕业设计源码011431

    基于SMM微信小程序的恋上诗词设计与实现 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,恋 ...

  5. ssm+mysql+基于微信小程序的恋上诗词设计与实现 毕业设计-附源码011431

    基于SMM微信小程序的恋上诗词设计与实现 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,恋 ...

  6. (附源码)ssm基于微信小程序的恋上诗词设计与实现 毕业设计 011431

    基于SMM微信小程序的恋上诗词设计与实现 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,恋 ...

  7. 【计算机毕业设计】基于微信小程序的线上水果店系统 水果销售系统

    毕设帮助.源码交流.技术解答,见文末 一.前言 现如今,互联网的广泛普及与应用,标志着信息化的时代已经到来,管理信息化行业在生活中占据着越来越重要的地位,信息化的服务与管理,大大简化了传统的管理模式, ...

  8. FFmpeg在Android上的移植优化步骤

    从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的.如今最火的智能手机操作系统Android上的很多第三方视频播放器也是基于FFmpeg实现全格式支持.由于A ...

  9. android启用其他应用程序,杀死Android上的另一个应用程序?

    我试图杀死我的另一个应用程序.但是这段代码无法杀死我的另一个应用程序.我知道杀死另一个应用程序是一个坏主意.但是我有一个学习的目的,并且我试图杀死人.我的代码部分: Button runningApp ...

最新文章

  1. 微服务注册中心的选型和思考
  2. docker与kuberentes基本概念与操作学习
  3. cmd命令窗口mysql查询表数据命令行_cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)...
  4. (10)数据分析-变量分析
  5. html----js控制下拉框(详解
  6. php微信公众号登录
  7. java求根号值_Java-求根号n(示例代码)
  8. WinCE 下鼠标键盘驱动分析
  9. 短信API接口怎么调用?
  10. 明尼苏达大学博导“约法十章”火了:没事不乱开会、合写论文不要催导师,复旦教授直呼值得学习...
  11. 无处不在的人生压力让人变得孤独抑郁
  12. 用Python代码刷王者金币
  13. 计算机自定义桌面,如何自定义电脑桌面的图标显示
  14. 示波器X-Y模式分析
  15. 实战攻防之紫队视角下的实战攻防演习组织
  16. UltraISO刻录系统映象出现“此光盘不是空白光盘”
  17. 双通道中频信号数字下变频及相位差估计(FPGA)
  18. memsql-官宣世界最快的内存关系型数据库安装部署
  19. xcode 工程常见问题
  20. JVM成神之路-Java垃圾回收

热门文章

  1. java继承覆盖总结
  2. 内存管理之虚拟页式分配
  3. Python科学画图小结
  4. 吴恩达 coursera ML 第八课总结+作业答案
  5. Keras学习笔记:序列式模型
  6. 从理论角度理解L1、L2正则化
  7. 高斯平稳随机过程仿真
  8. [云炬创业管理笔记]第五章打磨最有效的商业模式测试5
  9. 云炬随笔20160729
  10. oracle数据库在sqlplus登录时遇到的问题