环境:CentOS 7+NDK 20.0.5594570+libiconv-1.14

下载

下载libiconv-1.14版本,地址: https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

下载zbar,地址:https://github.com/ZBar/ZBar

编译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 srclib
sed -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文件,修改后的文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.sourceforge.zbar.android"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="28" />
<application android:label="@string/app_name" >
<activity android:name="ACTIVITY_ENTRY_NAME"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

3.修改android/project.properties,修改target值为系统支持的最低版本,如android-19

4.修改Android.mk,如下:

#
# Android NDK makefile
#
# build - <ndk path>/ndk-build ICONV_SRC=<iconv library src>
# clean - <ndk path>/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目录下就可以看到生成的文件了

zbar的具体编译demo可参考:https://github.com/kongpf8848/zbar-android

zbar的具体使用demo可参考:https://github.com/kongpf8848/zbarcamera

最新文章

  1. Quartz框架
  2. Vector &amp; ArrayList 的主要区别
  3. appcan.windw.open appcan.frame.open appcan.window.openPopOver evaluateScript
  4. 48. Remove Duplicates from Sorted List &amp;&amp; Remove Duplicates from Sorted List II
  5. FAQ: Machine Learning: What and How
  6. 快速幂 --- CSU 1556: Jerry&#39;s trouble
  7. 在Eclipse中编写servlet时出现&quot;The import javax.servlet cannot be resolved&quot; 问题解决办法
  8. Eclipse基金会
  9. Android:自己定义输入法(输入password时防止第三方窃取)
  10. Effective C++:规定12:不要忘了复制的对象时,它的每一个组成部分
  11. session校验是否登录
  12. 关于function
  13. poj_2186: Popular Cows(tarjan基础题)
  14. 201521123014 《Java程序设计》第9周学习总结
  15. synchronized修饰static方法与非static方法的区别
  16. 14 Fragment的V4包的使用
  17. DirectX11--实现一个3D魔方(3)
  18. JS-两个空数组为什么不相等?
  19. php+ajax文件上传
  20. Lua 与 C 交互值 函数调用(2)

热门文章

  1. redis笔记3
  2. Android系统源码目录
  3. 修改host指定域名指向ip,Windows脚本与Linux脚本
  4. MYSQL练习随笔
  5. linux7系统进入单用户模式
  6. 初识V4L2(三)-------分析vivi.c 虚拟视频驱动
  7. 201871010104-陈园园 《面向对象程序设计(java)》第十二周学习总结
  8. robotframework-post request请求携带上一个请求返回的cookie
  9. day9_7.9 函数的定义
  10. Django之创建项目、目录层级、基本操作