二维码开源库ZBar-windows下编译和使用_weixin_30896763的博客-程序员秘密

技术标签: 移动开发  c/c++  

源码  

  下载最新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下的工程目录,

 1 /* include/config.h.  Generated from config.h.in by configure.  */
 2 /* include/config.h.in.  Generated from configure.ac by autoheader.  */
 3 
 4 /* whether to build support for Code 128 symbology */
 5 #define ENABLE_CODE128 1
 6 
 7 /* whether to build support for Code 39 symbology */
 8 #define ENABLE_CODE39 1
 9 
10 /* whether to build support for EAN symbologies */
11 #define ENABLE_EAN 1
12 
13 /* whether to build support for Interleaved 2 of 5 symbology */
14 #define ENABLE_I25 1
15 
16 /* whether to build support for PDF417 symbology */
17 #define ENABLE_PDF417
18 
19 /* whether to build support for QR Code */
20 #define ENABLE_QRCODE 1
21 
22 /* Program major version (before the '.') as a number */
23 #define ZBAR_VERSION_MAJOR 0
24 
25 /* Program minor version (after '.') as a number */
26 #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基本能正常运行了。

 

最终的工程结构如下:

 

转载于:https://www.cnblogs.com/greyorbit/p/8444961.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30896763/article/details/94770508

智能推荐

博客总结十一——C++的类_fengxiaoke_fxk的博客-程序员秘密

1、构造函数:实例化对象是自动使用构造函数初始化对象2、成员函数:类内部定义的函数默认为inline;类内部声明成员函数是必须的;const成员函数:double Sales_item::avg_price() const{}:const成员函数不能改变其所操作的对象的数据成员,const必须同时出现在定义和声明中;3、完全限定名:Sales_item::用于函数定义在

QT之系统托盘图标_qt 托盘图标_小米的修行之路的博客-程序员秘密

理论摘自网友:https://blog.csdn.net/zhuyunfei/article/details/514338221.功能说明对于GUI程序,如果想要实现当最小化时,程序从任务栏消失,在系统托盘显示一个图标,表示此程序,并能在托盘内通过双击或者菜单使程序界面恢复。2.使用的类主要使用的此类:QSystemTrayIcon。 其中QSystemTrayIcon是主要操作...

bootstrap之登录窗口居中布局_lss0555的博客-程序员秘密

效果图代码示例&amp;amp;lt;!DOCTYPE html&amp;amp;gt;&amp;amp;lt;html lang=&amp;quot;en&amp;quot;&amp;amp;gt;&amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;amp;gt;&amp;amp;lt;meta

[Android]Maven 仓库的使用与私有仓库搭建_runstoppable的博客-程序员秘密

本文为“拥抱Android Studio”系列第四篇。作者何畅彬,现任BugTags技术总监,关注移动SDK研发、后端服务设计与实现,个人博客:&amp;amp;nbsp;http://kvh.io/。&amp;amp;nbsp;使用 Android Studio,必然要与 maven 仓库频繁打交道,在创造和分享自己打造的 Android library 的时候,maven 仓库的知识更是必不可少。本章将为开发者系统梳理这...

华为防火墙USG6300轻松4步配置_usg6300配置手册_qhddlgy的博客-程序员秘密

华为防火墙配置包可以用。版本信息:USG6300 V100R001C30SPC600,轻松4步,实现安全防护1.登录默认admin admin,你需要查到管理口,就是0口,这个点很重要。2.接口地址配置3.NAT地址转换,可以是接口地址也可以自己定义pool。4.静态映射5.安全策略,要不没有策略防火墙就没有太大的作用了。默认一定停掉,这样防火墙才能启动保护小弟...

查找算法学习(1)_BIG_GENERAL_DD的博客-程序员秘密

1.对于静态表的顺序查找法,若在表头设置监视哨,则正确的查找方法:从第n个元素开始往前查找该数据元素。分析:常把第一个或最后一个元素作为哨兵表头设置监视哨,就是将空出来的下标为0的这个元素的值设为Key,这样我们就不用多次判断 i是否越界,因为就算静态表中找不到,也会在0位置上配对成功,返回0!n个元素都要比较一次,但都不成功,最后监视哨也要比较一次,比较成功,一共比较n+

随便推点

twilio 短信接口_使用Android Things和Twilio构建短信通知系统_danpincheng0204的博客-程序员秘密

twilio 短信接口 在本教程中,我们将介绍如何使用Android Things和Twilio构建SMS通知系统。 本教程的主要目标是逐步描述如何实现基于Android Things的IoT系统,该系统通过Twilio发送SMS通知。 我们都知道物联网作为颠覆性技术的重要性,正在颠覆几个经济领域。 我们无需描述什么是物联网以及如何使用它 。 此外,由Google生产的新型物联网操作系统A...

在CentOS7环境下搭建FTP 服务器_FrozenLove_G的博客-程序员秘密

1.安装ftp软件包,否则运行ftp指令时会出现command not find的问题[[email protected] gyf]# yum install ftp2.接下来安装vsftp,这是搭建ftp的关键软件包[[email protected] gyf]#yum install vsftpd3.设置ftp服务为开机启动项[[email protected] gyf]# chkconf...

AKOJ-2010-魔法石_weixin_33938733的博客-程序员秘密

链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=2010题意:Vyoung最近收集到一大批魔法石,这些魔法石有两种特性,攻击和防守,不同特性的两个魔法石可以组合在一起形成威力巨大的武器(正确的组合),现在给你m对魔法石,检查其中有多少对与之前的组合矛盾,即组合错误的魔法石注意组合错误即是:相同特性的魔法石是一个组合,或者自己与自己组合...

Convolutional Neural Networks for Small-footprint Keyword Spotting论文笔记_Shadownow的博客-程序员秘密

CNN被证明优于DNN,因为参数少得多。在这里考虑两种限制,一种是限制乘法次数,另一种是限制参数数量。使用CNN框架时,发现相较DNN,在这些限制的情况下,false reject rate改进了百分之二十七至百分之四十四。由于运行在移动设备上,因此必须具有较小的内存占用和较低的计算能力。目前谷歌的KWS系统使用DNN,优于HMM。而且DNN在设备上运行,可以通过改变网络中的参数数量,很容易地调整模型大小。CNN在过去几年里已经成为声学模型的热门,在各种语音相关的任务(索引中的任务4 5 6 )里比DNN

JSP JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术_dengjuanshou7445的博客-程序员秘密

JSP JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和...

推荐文章

热门文章

相关标签