歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux環境下libiconv庫基於Android NDK的編譯方法

libiconv是一個跨平台的提供轉碼函數的開源庫,它提供了一個轉換函數:iconv()來實現不同編碼之間的轉換,在Android平台上libxml2庫的編譯需要用到libiconv庫,所以需要編譯出libiconv庫才能夠實現libxml2的基於Android NDK的編譯,為此對libiconv庫進行了編譯分析,最終成功,並以此進行記錄。至於Android NDK平台的編譯環境搭建具體可以參考( http://www.linuxidc.com/Linux/2011-09/42646.htm )。下面就介紹如何實現libiconv庫的Android NDK環境編譯。

首先,到官網下載最新版的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平台下。

Copyright © Linux教程網 All Rights Reserved