环境:CentOS 7+NDK 20.0.5594570+libiconv-1.14
下载
编译libiconv-1.14
1.执行./configure
2.执行make
报错,提示 error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
解决办法:cd srclibsed -i-e '/gets is a security/d' ./stdio.in.h
编译zbar
1.解压ZBar-master.zip,将刚才编译好的libiconv-1.14文件夹,java/zbarjni.c文件,zbar文件夹,include文件夹复制到android/jni目录下,
最后的目录结构如下:
2.修改android/AndroidManifest.xml文件,修改后的文件如下:
3.修改android/project.properties,修改target值为系统支持的最低版本,如android-19
4.修改Android.mk,如下:
#
# Android NDK makefile
#
# build- /ndk-build ICONV_SRC=# clean- /ndk-build clean
#
MY_LOCAL_PATH := $(call my-dir)
ICONV_SRC := $(MY_LOCAL_PATH)/libiconv-1.14# libiconv
include $(CLEAR_VARS)
LOCAL_PATH :=$(ICONV_SRC)
LOCAL_MODULE :=libiconv
LOCAL_CFLAGS :=\-Wno-multichar \-D_ANDROID \-DLIBDIR="c"\-DBUILDING_LIBICONV \-DBUILDING_LIBCHARSET \-DIN_LIBRARY
LOCAL_SRC_FILES :=\
$(ICONV_SRC)/lib/iconv.c \
$(ICONV_SRC)/libcharset/lib/localcharset.c \
$(ICONV_SRC)/lib/relocatable.c
LOCAL_C_INCLUDES :=\
$(ICONV_SRC)/include \
$(ICONV_SRC)/libcharset \
$(ICONV_SRC)/libcharset/include
include $(BUILD_SHARED_LIBRARY)
LOCAL_LDLIBS := -llog -lcharset
# libzbarjni
include $(CLEAR_VARS)
LOCAL_PATH :=$(MY_LOCAL_PATH)
LOCAL_MODULE :=zbarjni
LOCAL_SRC_FILES :=zbarjni.c \
zbar/img_scanner.c \
zbar/decoder.c \
zbar/image.c \
zbar/symbol.c \
zbar/convert.c \
zbar/config.c \
zbar/scanner.c \
zbar/error.c \
zbar/refcnt.c \
zbar/video.c \
zbar/video/null.c \
zbar/decoder/code128.c \
zbar/decoder/code39.c \
zbar/decoder/code93.c \
zbar/decoder/codabar.c \
zbar/decoder/databar.c \
zbar/decoder/ean.c \
zbar/decoder/i25.c \
zbar/decoder/qr_finder.c \
zbar/qrcode/bch15_5.c \
zbar/qrcode/binarize.c \
zbar/qrcode/isaac.c \
zbar/qrcode/qrdec.c \
zbar/qrcode/qrdectxt.c \
zbar/qrcode/rs.c \
zbar/qrcode/util.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \
$(LOCAL_PATH)/zbar \
$(ICONV_SRC)/include
LOCAL_SHARED_LIBRARIES :=libiconv
include $(BUILD_SHARED_LIBRARY)
5.修改Application.mk,如下:
APP_ABI := armeabi-v7a
6.切换到android/jni目录下,执行ndk-build命令
报错,如下:
解决办法:
修改libiconv-1.14/libcharset/config.h第14行,修改后的内容如下:#define HAVE_LANGINFO_CODESET 0
报错,如下:
解决办法:
修改文件libiconv-1.14/libcharset/lib/localcharset.c文件中函数get_charset_aliases (void),搜索:int c;把该变量定义放到该函数的开始处
继续编译,大功告成,在android/libs/armeabi-v7a目录下就可以看到生成的文件了