博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系列篇|编译可在Android上运行的依赖库(一):glib库
阅读量:5977 次
发布时间:2019-06-20

本文共 1951 字,大约阅读时间需要 6 分钟。

 

前言

这是系列文章,它们由《编译可在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官方参考资料:,这篇文章详细介绍了如何使用Android NDK工具进行交叉编译。

 

4. 编译依赖库

libiconv

版本:1.14

编译参考资料:

 

gettext

版本:0.19.7

编译参考资料:

 

pcre

版本:8.38

编译参考资料:

 

libffi

版本:3.2.1

编译参考资料:

 

5. 编写android.cache

在glib源码的根目录下创建android.cache文件,然后在该文件中写入下面的内容:

 

cache文件的glib官方参考资料:。

 

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:

2、

 

编译可在Android上运行系列:

 

 


 

作者:寻禹@阿里移动安全,更多技术文章,请访问

转载地址:http://evsox.baihongyu.com/

你可能感兴趣的文章
阿里云服务器 Windows连接不成功 提示“你的凭证不工作” 解决方法
查看>>
NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
查看>>
【性能优化】直方图
查看>>
Visual C#之核心语言
查看>>
[J2ME]Nokia播放音乐时发生MediaException的解决办法
查看>>
【转】CSS 与 HTML5 响应式图片
查看>>
代码重构(五):继承关系重构规则
查看>>
redis.conf 配置档详解
查看>>
Windows App开发之集合控件与数据绑定
查看>>
五分钟创建一个自己的NPM包
查看>>
iOS多线程编程:线程同步总结 NSCondtion
查看>>
Flutter开发环境安装
查看>>
QQ登录的那些坑(如何开发qq登陆功能)
查看>>
中大型网站技术架构演变过程
查看>>
深入剖析OkHttp系列(五) 来自官方的事件机制
查看>>
Java 9 CompletableFuture 进化小脚步
查看>>
【前端词典】进阶必备的网络基础(下)
查看>>
ARTS训练第三周
查看>>
12月21日云栖精选夜读:阿里云总裁胡晓明:AI泡沫过后,下一站是“产业AI”...
查看>>
一出好戏不止是部电影,它也正接近你的生活。
查看>>