源码  

  下载最新Zbar源码(http://zbar.sourceforge.net/),网站的WIKI是空白的,所以只能在源码包里找使用说明了,很遗憾Windows下怎么编译没说明,只是说明了Windows安装包的使用(可能看得不够仔细,没找到),源码包里面有个VS的工程同样是用库文件的。网上搜了一下,也都是使用官网Windows安装包,然后调用安装目录的库文件的例程,直接使用源码的找不到。倒是刚好找到了一个STM32F4的版本(http://www.openedv.com/forum.php?mod=viewthread&tid=82582&page=1),按照其说明貌似是有问题,不能使用的,但能编译,至少还有些参考价值,比如需要使用到源码包里面的那些文件。源码目录如下,需要使用的文件,基本在zbar文件夹内。

移植过程   

  开始时使用的IDE是VS,由于平时会写一些上位机和小工具,所以第一时间想到的是VS。但经过一番折腾还是投降了。因为Zbar是用C99写的,还有用了不少GCC的语法,使用VC编译不了。于是下载了CodeBlock,下载是codeblocks-17.12mingw-setup.exe,带mingw,包含GCC和GDB,链接http://www.codeblocks.org/downloads/26。
以下是移植记录:
1: 新建Console工程
2: 复制zbar-0.10\include\zbar.h到zbar-0.10\zbar\,并且把zbar文件夹复制到工程目录
3:添加zbar-0.10\zbar\decoder和zbar-0.10\zbar\qrcode目录下的源码
4:添加zbar-0.10\zbar\目录下的config.c,decoder.c,error.c,image.c, img_scanner.c, refcnt.c. scanner.c,symbol.c

工程结构如下:

5:添加相关头文件路径,编译
报错
Zbar\zbar\config.c|24|fatal error: config.h: No such file or directory|
搜遍整个源码目录也没看到有config.h。查看了源码包根目录下INSTALL文件,config.h应该是由autoconf工具生成的,但这东西又是linux或unix下的,于是拷贝ZBar到Linux下,按照INSTALL的说明生成config.h,再添加回windows下的工程目录,

 /* include/config.h.  Generated from config.h.in by configure.  */
/* include/config.h.in. Generated from configure.ac by autoheader. */ /* whether to build support for Code 128 symbology */
#define ENABLE_CODE128 1 /* whether to build support for Code 39 symbology */
#define ENABLE_CODE39 1 /* whether to build support for EAN symbologies */
#define ENABLE_EAN 1 /* whether to build support for Interleaved 2 of 5 symbology */
#define ENABLE_I25 1 /* whether to build support for PDF417 symbology */
#define ENABLE_PDF417 /* whether to build support for QR Code */
#define ENABLE_QRCODE 1 /* Program major version (before the '.') as a number */
#define ZBAR_VERSION_MAJOR 0 /* Program minor version (after '.') as a number */
#define ZBAR_VERSION_MINOR 10

编译。
报错
Zbar\zbar\qrcode\qrdectxt.c|9|fatal error: iconv.h: No such file or directory|
Iconv同样是linux下的东西,Windows编译Linux下的源码就是苦逼。
下载并安装libiconv-1.9.2-1.exe(http://gnuwin32.sourceforge.net/packages.html)
将安装目录下的iconv.h,libcharset.h,localcharset.h,libiconv2.dll拷贝工程目录下,并设置相关头文件和lib路径
重新编译后

报错Zbar\zbar\image.c|217|error: expected ')' before 'PRIx32'|

PRIx32是在inttypes.h定义的,包含该头文件后再编译,终于不报错了。

6:编译通过后,那怎么使用呢?查看zbar-0.10\examples目录下文件,里面是一些使用例程,最终挑选了zbar-0.10\examples\scan_image.c,将其内容复制粘贴到main.c,重新编译
报错
Zbar\main.c|3|fatal error: png.h: No such file or directory|
下载并安装libpng-1.2.37-setup.exe(http://gnuwin32.sourceforge.net/packages.html)
将安装目录下的png.h,pngconf.h,libpng12.dll拷贝工程目录下,并设置相关头文件和lib路径
重新编译
报错
png\include\png.h|477|fatal error: zlib.h: No such file or directory|
下载并安装zlib-1.2.3.exe(http://gnuwin32.sourceforge.net/packages.html)
将安装目录下的zconf.h,zlib.h,zlib1.dll拷贝工程目录下,并设置相关头文件和lib路径
重新编译。

通过。

7:将zbar-0.10\examples\barcode.png复制到工程根目录,对main.c做一下修改
屏蔽if(argc < 2) return(1);
get_data(argv[1], &width, &height, &raw);改为get_data("barcode.png", &width, &height, &raw);

重新编译运行后,窗口输出如下:

到此,ZBar基本能正常运行了。

最终的工程结构如下:

二维码开源库ZBar-windows下编译和使用的更多相关文章

  1. 二维码开源库zbar、zxing使用心得

    首先说明我的测试场景是“识别打印在纸上的二维码”,在扫描结果中寻找二维码并进行识别,而不是直接让摄像头对着二维码扫描. zbar和zxing用的都是自己从github上clone的c++源码/接口编译 ...

  2. 二维码开源库ZBar-MDK STM32F429移植

    前两篇文章已经实现ZBar在Windows平台下的编译和使用,本文将介绍如何把ZBar移植到STM32F429,IDE使用MDK. 1. MDK工程设置 (1)不勾选Use MicroLIB ,使用I ...

  3. 二维码开源库ZBar-吐槽篇

    前不久在网上看到一篇文章<QR-Decoder-OV5640 二维码识别> ,是某开发板的教程.记得对应的开发板以前购买过,当初只是为了看OV5640的JPG的输出效果,结果由于公司奇葩的 ...

  4. 二维码开源库ZBar-实现中文解码

    中文乱码 上篇<ZBar-windows下编译和使用>已经成功解析了条形码,但目标是二维码,经测试二维码中文会出现乱码.下图二维码的内容是"http123测试456", ...

  5. C++二维码相关库编译

    一.瞎想 坐在地铁上闲来无聊,突然想到了二维码,顺手就百度了下相关的资料,目前C++二维码相关的库不多,也就zbar(开源中国上下了半天也没下载下来).zxing,不过这两个库据说都是解析二维码的,不 ...

  6. Android二维码开源项目zxing用例简化和生成二维码、条形码

    上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的測试程序:CaptureActivity比較复杂,我仅仅要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自 ...

  7. 个性二维码开源专题<替换元素点>

    基础方法:ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // Fo ...

  8. 个性二维码开源专题<替换定位点>

    基础方法: ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // F ...

  9. 个性二维码开源专题<液化/圆角/效果>

    基础方法: ChangeFillShape //修改填充形状 ChangeFillShape(...) // 摘要: // 修改填充形状 // // 参数: // g: // 图形画板 // // F ...

随机推荐

  1. POJ 3278 Catch That Cow(模板——BFS)

    题目链接:http://poj.org/problem?id=3278 Description Farmer John has been informed of the location of a f ...

  2. dig(域信息搜索器)命令

    dig命令   dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常. 语法 dig(选项)(参数) 选项 @<服务器地址>:指定进行域名解析的域名服务器: -b<ip地 ...

  3. phpmyadmin 自动登录的办法

    在本地开发php项目中,需要配合使用mysql在线管理系统phpmyadmin,因为经常使用,就不想每次都输入密码,所以想办法把用户名密码写入配置文件中,让每次都可以自动登录. 工具/原料   代码编 ...

  4. WatchKit编程指南:Watch Apps--文本、标签以及图片

    文本和分类标签 为了在Watch app中展示文本,使用标签对象.分类标签支持格式化的文本,可以在运行时被程序修改. 要添加标签到界面控制器,可以把它拖到对应的故事版场景(storyboard),在这 ...

  5. goDaddy SSL证书 Nginx配置全流程 (转)

    好长时间没动过这玩意了,今天突然用到,忘的一干二净.在此做个笔记吧! 一.购买Godaddy SSL证书 1.打开Godaddy官网 http://www.godaddy.com/: 2.点击网站导航 ...

  6. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置

    Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...

  7. Java常用的框架

    一.SpringMVC http://blog.csdn.net/evankaka/article/details/45501811 Spring Web MVC是一种基于Java的实现了Web MV ...

  8. Mybatis延迟加载和查询缓存

    摘录自:http://www.linuxidc.com/Linux/2016-07/133593.htm 阅读目录 一.延迟加载 二.查询缓存 一.延迟加载 resultMap可以实现高级映射(使用a ...

  9. ceph rbd 封装api

    1.安装python,uwsgi,nginx环境 pip安装省略 yumgroupinstall"Developmenttools" yuminstallzlib-develbzi ...

  10. 在单体应用的一些DDD实践经验

    阅读此文需要一定的DDD基础,如果你是第一次接触DDD读者,建议先去阅读一些DDD相关的书籍或者文章之后再来阅读本文. 背景 自从我在团队中推行DDD以来,我们团队经历了一系列的磨难--先是把核心项目 ...