编译环境:
ubuntu16.04、NDK-17c、libiconv-1.16.tar.gz
步骤:
1.将libiconv-1.16.tgr.gz解压并重命名为jni
tar zxvf libiconv-1.16.1.tar.gz
mv libiconv-1.16.1 jni
2.创建Android.mk文件(有版本要求可以创建Application.mk文件)
cd jni
vim Android.mk
复制以下内容到Android.mk中保存并且退出
LOCAL_PATH:= $(call my-dir)
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)
3.生成config.h文件
./configurg
4.make
make
5.编译(release版本)
ndk-build NDK_DEBUG=0
6.编译完成
目录libs下会生成动态库
编译过程中出现的错误:
/home/work/android/libiconv-1.16/obj/local/arm64-v8a/objs/iconv/libcharset/lib/localcharset.o: In function `locale_charset':
/home/work/android/libiconv-1.16/jni/libcharset/lib/localcharset.c:696: undefined reference to `nl_langinfo'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/home/work/android/libiconv-1.16/obj/local/arm64-v8a/libiconv.so] Error 1
查看localcharset.c文件发现 HAVE_LANGINFO_CODESET 这个宏被打开导致
解决方法:
find . -name "config.h"
将所有config.h中的
#define HAVE_LANGINFO_CODESET 1 改为 #define HAVE_LANGINFO_CODESET 0