编译可在Android上运行的libiconv库

编译可在Android上运行的libiconv库

@(Android研究)[android|libiconv]


[TOC]


不歪博客:http://my.oschina.net/ibuwai/blog

本文公开首发于阿里聚安全博客:https://jaq.alibaba.com/community/index.htm?spm=0.0.0.0.ycEUXK

前言

libiconv版本:1.14。

本文在Ubuntu 64位系统上对libiconv项目进行交叉编译。

下文中的"NDK"若无特殊说明均指"Android NDK"。

注意:不要运行libiconv源码目录下的autogen.sh文件。如果先运行autogen.sh然后运行configure再然后使用make命令编译时,编译会出错。

步骤

1. 下载并安装Android NDK

下载并安装Android NDK的过程在这里不做介绍。

2. 下载libiconv

到libiconv的官网去下载这个库的源码。官网地址:https://www.gnu.org/software/libiconv/#TOCdownloading

3. 设置NDK和SYSROOT环境变量

请阅读编译可在Android上运行的glib库中相应的步骤。

4. 创建NDK工具的软链接

为"$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin"目录下的所有工具创建软链接,软链接文件名的格式为:arm-linux-eabi-XXX。举例:将arm-linux-androideabi-gcc链接为arm-linux-eabi-gcc。

这是因为当运行libiconv源码目录下的configure脚本并传入命令选项"--host=arm-linux-androideabi"时,该脚本会提示找不到androideabi对应的系统。关于"--host=arm-linux-androideabi"命令选项的解析见下文。

注意:必须确保软链接名可以在当前shell环境中找到。

另外:arm-linux-androideabi-XXX也可以链接为arm-linux-eabiYYY-XXX。举例:将arm-linux-androideabi-gcc链接为arm-linux-eabiAndroid-gcc。如果想知道为什么不创建特定名字的软链接configure脚本就无法执行成功,那么可以尝试一下不这么做时会提示什么错误。

5. 运行configure

CPP="arm-linux-eabi-gcc -E" CPPFLAGS="-I${SYSROOT}/usr/include" ./configure --prefix="${SYSROOT}/usr" --host=arm-linux-eabi CFLAGS="--sysroot $SYSROOT"

--host选项的值"arm-linux-eabi"在configure脚本中会被扩展成"arm-linux-eabi-gcc"这样的编译工具名。--host选项的值必须包含在软链接的名字中,举例,如果有个软链接名为arm-linux-eabi-gcc,那么--host选项的值就必须是arm-linux-eabi;如果有个软链接名为arm-linux-eabiabc-gcc,那么--host选项的值就必须是arm-linux-eabiabc。

CPP指定C预处理器,其中的"-E"命令选项是必须,如果没有这个命令选项将会报出下面的错误:

"C preprocessor arm-linux-eabi-gcc fails sanity check

奇怪的是,我在Linux上不指定CPP和CPPFLAGS宏进行编译不会报上面的错误,而在Mac OSX系统上不指定CPP和CPPFLAGS宏就会报上面的错误。

6. 编译和安装

使用make命令编译源码,当编译成功是使用"make install"命令进行安装,libiconv将会被安装到${SYSROOT}/usr/lib目录下,在上文中"--prefix="${SYSROOT}/usr"命令选项就是用来指定安装的目录的。

转载于:https://my.oschina.net/ibuwai/blog/647432

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值