Win7下通过Cygwin编译libiconv

【原创文章,转载请保留或注明出处:http://blog.csdn.net/leer168/article/details/7395855

环境:Win7 64,NDK R7b,libiconv-1.14

第一步的
./configure  
改为
./configure --build=x86_64-pc-linux-gnu --host=arm-linux-eabi
我编译成功,使用也正常

其他步骤可以参考这里

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 --build=x86_64-pc-linux-gnu --host=arm-linux-eabi,然后$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平台下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值