源码  

  下载最新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. cesium编程入门(七)3D Tiles,模型旋转

    cesium编程入门(七)3D Tiles,模型旋转 上一节介绍了3D Tiles模型的位置移动,和贴地的操作,这一节来聊一聊模型的旋转, 参考<WebGl编程指南>的第四章 假设在X轴和 ...

  2. Spark学习笔记1(初始spark

    1.什么是spark? spark是一个基于内存的,分布式的,大数据的计算框架,可以解决各种大数据领域的计算问题,提供了一站式的服务 Spark2009年诞生于伯克利大学的AMPLab实验室 2010 ...

  3. javascript之事件监听

    addEventListener是一个监听事件并处理相应的函数,用于向指定元素添加事件句柄,可使用removeEventListener()方法来移除addEventListener()方法添加的事件 ...

  4. Mysql Index extends优化

    Innodb通过自动把主键列添加到每个二级索引来扩展它们: CREATE TABLE t1 ( i1 , i2 , d DATE DEFAULT NULL, PRIMARY KEY (i1, i2), ...

  5. Python3之数据类型

    1.基本数据类型数字类型整型 int浮点型 float布尔型 bool: True==1.False==0复数类型 complex算术运算符 + - * / // % **赋值运算符 += -= *= ...

  6. Linux - ubuntu 16 打开SSH服务

    ubuntu 16 打开SSH服务 1.查看是否启动进程 roott@jiqing-virtual-machine:~# ps -ef | grep sshd root 3477 1 0 18:36 ...

  7. WPF 简易新手引导

    这两天不忙,所以,做了一个简易的新手引导小Demo.因为,不是项目上应用,所以,做的很粗糙,也就是给需要的人,一个思路而已. 新手引导功能的话,就是告诉用户,页面上操作的顺序,第一步要做什么,第二步要 ...

  8. 捕获arm非托管磁盘虚拟机,并进行还原

    背景:非托管磁盘虚拟机"hlmcen69n1",附加了一块100GB的数据磁盘.由于arm非托管磁盘机器无法通过Portal界面直接"Capture",故只能通 ...

  9. Django_xamin注册model错误

    可能出现的错误: 1. xadmin.sites.AlreadyRegistered: The model UserProfile is already registered 2. error:Fie ...

  10. 计算机改名引发的ORA

    近期上班时,由于开机时老是提示" 局域网出现计算机重名冲突",于是把计算机名字给改了,从PC2010081312zeo改为了CXBIKKKKKKK,结果第二天来的时候,用PL/SQ ...