libiconv android编译,linux环境下libiconv库基于Android NDK的编译方法

libiconv是一个跨平台的提供转码函数的开源库,它提供了一个转换函数:iconv()来实现不同编码之间的转换,在Android平台上libxml2库的编译需要用到libiconv库,所以需要编译出libiconv库才能够实现libxml2的基于Android NDK的编译,为此对libiconv库进行了编译分析,最终成功,并以此进行记录。至于Android NDK平台的编译环境搭建具体可以参考我写的其它博文。下面就介绍如何实现libiconv库的Android NDK环境编译。如果转载请保留该文章出处:http://www.shanzhashu.info/archives/220.html

首先,到官网下载最新版的libiconv库:http://ftp.gnu.org/pub/gnu/libiconv/,我编译时为1.14版,libiconv-1.14.tar.gz,解压该文件到linux系统中指定目录,然后把其中的源文件全部放到jni文件中。首先在linux环境中进行配置,即首先对libiconv库执行configure,生产linux环境下的config.h文件,因为这样生产的config.h里面定义了很多linux平台下的宏,安装方法:首先,$./configure,然后$make,然后构建Android.mk文件放到jni目录中。

Android.mk文件内容:

LOCAL_PATH:= $(call my-dir)

#libiconv.so

include $(CLEAR_VARS)

LOCAL_MODULE := libiconv

LOCAL_CFLAGS := \

-Wno-multichar \

-DANDROID \

-DLIBDIR="c" \

-DBUILDING_LIBICONV \

-DIN_LIBRARY

LOCAL_SRC_FILES := \

libcharset/lib/localcharset.c \

lib/iconv.c \

lib/relocatable.c

LOCAL_C_INCLUDES += \

$(LOCAL_PATH)/include \

$(LOCAL_PATH)/libcharset \

$(LOCAL_PATH)/lib \

$(LOCAL_PATH)/libcharset/include \

$(LOCAL_PATH)/srclib

include $(BUILD_SHARED_LIBRARY)

#test

include $(CLEAR_VARS)

LOCAL_MODULE :=genutf8

LOCAL_SRC_FILES := tests/genutf8.c

LOCAL_C_INCLUDES += \

$(LOCAL_PATH)/include \

$(LOCAL_PATH)/libcharset \

$(LOCAL_PATH)/lib \

$(LOCAL_PATH)/libcharset/include \

$(LOCAL_PATH)/srclib

LOCAL_SHARED_LIBRARIES := libiconv

include $(BUILD_EXECUTABLE)

执行编译 $ndk-build

1、编译时提示:

libiconv-1.14/jni/libcharset/lib/localcharset.c:51:24: error: langinfo.h: No such file or directory

解决方法:

修改目录文件libcharset/config.h的宏定义,禁止该宏定义:

/* Define if you haveand nl_langinfo(CODESET). */

#define HAVE_LANGINFO_CODESET 0

2、提示错误:

报“c undeclaired”错误

解决方法:

修改文件/libcharset/lib/localcharset.c中函数get_charset_aliases (void)

搜索:int c;

把该变量定义放到该函数的开始处。

执行$ndk-build,编译libiconv.so成功。

到目录libs/armeabi-v7a下可以找到。

如果执行程序则需要打包到Android平台下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在 Android 平台上使用 libiconv ,我们需要进行交叉编译。下面是一个简单的步骤: 1. 下载 libiconv 源代码 你可以从 GNU 的官方网站上下载最新版本的 libiconv 源代码。 2. 安装交叉编译工具链 在你的开发机器上安装适合 Android 平台交叉编译的工具链。 3. 配置交叉编译环境变量 在你的 shell 配置文件中,添加以下环境变量: ``` export PATH=$PATH:/path/to/android/toolchain/bin export SYSROOT=/path/to/android/sysroot export CC=arm-linux-androideabi-gcc export CXX=arm-linux-androideabi-g++ export AR=arm-linux-androideabi-ar export RANLIB=arm-linux-androideabi-ranlib export LDFLAGS="-L/path/to/android/sysroot/usr/lib -L/path/to/android/sysroot/lib" export CPPFLAGS="-I/path/to/android/sysroot/usr/include -I/path/to/android/sysroot/include" ``` 其中,`/path/to/android/toolchain` 是你安装的交叉编译工具链的根目录;`/path/to/android/sysroot` 是你安装的 Android 平台的 sysroot 目录。 4. 配置 libiconv 进入到 libiconv 的源代码目录中,执行以下命令: ``` ./configure --host=arm-linux-androideabi --prefix=/path/to/android/sysroot/usr --enable-static --disable-shared ``` 其中,`/path/to/android/sysroot/usr` 是你希望安装 libiconv 的目录。 5. 编译和安装 libiconvlibiconv 的源代码目录中,执行以下命令: ``` make make install ``` 这将会编译和安装 libiconv 到指定的目录中。 现在你已经成功地在 Android 平台上交叉编译libiconv

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值