首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
0
0
[系列文]编译可在Android上运行的依赖库:glib库
发表于: 2016-5-5 15:13
3169
[系列文]编译可在Android上运行的依赖库:glib库
阿里安全
1
2016-5-5 15:13
3169
前言
这是系列文章,它们由《编译可在Android上运行的glib库》及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出。由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库交叉编译到Android平台上才能成功的编译glib库,系列文章中除《编译可在Android上运行的glib库》外的其他交叉编译文章均是介绍如何对glib依赖库进行交叉编译。以上,所以叫系列文章,因为这些文章完整的介绍了如何编译可在Android上运行的glib库。
文章价值
这些文章的核心价值是Android平台的交叉编译经验和提供了新的编译方式。有些人把linux库移植到Android上的时候将makefile翻译为Android.mk文件(据我所知有不少人都是这样做的),而使用本文中的方法可以直接利用原有的makefile文件进行交叉编译。
编译环境
本文在Ubuntu 64位系统上对glib项目进行交叉编译。
约定
下文中的"NDK"若无特殊说明均指"Android NDK"。
步骤
1. 下载并安装Android NDK
下载并安装Android NDK的过程在这里不做介绍。
下载gitlib
2. 安装必要工具
●
[*]GNU autoconf 2.62
[*] GNU automake 1.11
[*] GNU libtool 2.2
[*] GNU gettext 0.10.40
[*] pkg-config 0.16
[*] gtk-doc
[*] libffi 3.0.0
关于编译glib项目要安装的工具可以参考glib源码根目录下的HACKING文件。
3. 设置NDK和SYSROOT环境变量
设置NDK环境变量
在"$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin"目录中包含了arm-linux-androideabi-gcc、arm-linux-androideabi-g++等交叉编译工具,不过交叉编译工具的路径根据NDK版本和编译工具版本的不同会有所变化。
设置SYSROOT环境变量
SYSROOT表示一个目录,该目录中包含了目标的系统头文件和库,在当前上下文语境中目标表示的是arm cpu架构。路径中的"android-21"表示Android API级别,其中21表示的是Android5.0.1。
参考资料
本文使用Android NDK的工具进行交叉编译,google官方参考资料:
Standalone Toolchain
,这篇文章详细介绍了如何使用Android NDK工具进行交叉编译。
4. 编译依赖库
libiconv
版本:1.14
编译参考资料:
编译可在Android上运行的libiconv库
gettext
版本:0.19.7
编译参考资料:
编译可在Android上运行的gettext库
pcre
版本:8.38
编译参考资料:
编译可在Android上运行的pcre库
libffi
版本:3.2.1
编译参考资料:
编译可在Android上运行的libffi库
5. 编写android.cache
在glib源码的根目录下创建android.cache文件,然后在该文件中写入下面的内容:
cache文件的glib官方参考资料:
Cross-compiling the GLib package
。
6. 运行autogen.sh
在glib源码根目录下输入命令:
该脚本执行成功时,会生成一个名为"configure"的脚本文件。
7. 运行configure
如果不添加CPP和CPPFLAGS则将会报这个错误:"configure: error: C preprocessor "/lib/cpp" fails sanity check"。
--host选项的值"arm-linux-androideabi"在configure脚本中会被扩展成"arm-linux-androideabi-gcc"这样的编译工具名。
8. 编译和安装
使用make命令编译源码,当编译成功是使用"make install"命令进行安装,libiconv将会被安装到${SYSROOT}/usr/lib目录下,在上文中"--prefix="${SYSROOT}/usr"命令选项就是用来指定安装的目录的。
排错
configure.ac:88: error: possibly undefined macro: AC_DEFINE
问题
这是一个很模糊的问题我编译glib时安装了automake、libtool工具,却还是提示这个错误。
解决办法
我安装了这些工具解决了这个办法:autoconf,automake,autopoint,pkg-config。
但是具体是安装了什么库解决了这个问题,我还不清楚。
解决办法来源帖子:
1、M Cross Bug 2 glib Build Fail #799:
https://github.com/mxe/mxe/issues/799
2、
http://mxe.cc/#requirements-debian
作者:寻禹@阿里移动安全,更多技术文章,请访问
阿里聚安全博客
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
1
)
dnybz
雪 币:
66
活跃值:
(960)
能力值:
( LV2,RANK:10 )
在线值:
发帖
12
回帖
166
粉丝
0
关注
私信
dnybz
2
楼
不错,mark
2016-5-8 00:43
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
阿里安全
1
108
发帖
123
回帖
70
RANK
关注
私信
他的文章
[推荐]阿里90后工程师利用ARM MMU硬件特性开启安卓8终端的上帝模式
10683
[分享] RSAC 2018:人工智能成为驱动网络安全的新 “引擎”
2532
[分享]阿里安全X实验室最新黑科技:“人脸识别”3.0版可毫秒识破假人脸
2477
[分享]前沿 | 抗击黑产 阿里安全八大实验室首秀技术实力
3188
[分享]阿里云在RSAC 2018上宣布 将在西雅图建立安全实验室
2963
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部