首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为NDK库构建GLIBC

为NDK库构建GLIBC
EN

Stack Overflow用户
提问于 2012-01-11 23:45:32
回答 1查看 2.5K关注 0票数 2

我对构建一个开源项目很感兴趣,它需要GNU库GLIBC和GLIBM。如果我在Linux (我使用Ubuntu11.10作为主机)下为一个共享的(.so),甚至是一个静态的(.a)对象交叉编译它,使用ARMv7-一个霓虹灯架构,使用API-9作为一个库来调用Java的JNI,最终编译成一个APK进行分发,你会采取什么步骤来实现这个结果呢?

考虑到我已经尝试了Google NDK工具链(根据文档以一种简单的方式设置$PATH和$CC )、各种自定义工具链、Code Sourcery toolchainXDA forum using crosstool-ng上建议的工具链,是否有可能实现一个共享的目标文件,该文件可以从JNI调用,并且可以在非根的安卓设备上访问完整的GLIBC库?

我一直在寻找这个问题的答案,最接近的方法是在本地构建GLIBC和GLIBM,然后复制相关的对象(.o)文件,并使用NDK的arm-linux-androideabi-ld手动链接。当使用Java的System.LoadLibarary()调用库时,来自Crosstool-ng和CodeSourcery的libc.so.6文件将无法工作,因为重定位失败(给出错误未知reloc type 19)。我对重定位的了解不是最好的,但从我所读到的内容来看,这需要修改/linux/elf.h头文件,但我不确定从哪里开始。

我相信,从我所读到的内容来看,有可能制作一个静态可执行文件,它在链接时解决了所有依赖项,但就我所知,它不可能打包为APK文件。

当然,我不能是第一个想要在Android平台上编译C代码而不是Bionic的人?有如此多的C项目可以移植到安卓上,显然GLIBC已经在iPhone上提供了相当长的一段时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-12 02:41:32

任何低级C库都与操作系统本身有非常紧密的联系。虽然Linux和Android在很大程度上可能是一回事,但它们不是。针对另一个C库进行构建将需要首先移植所述C库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8822188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档