二維碼開源庫ZBar-windows下編譯和使用

源碼  

  下載最新Zbar源碼(http://zbar.sourceforge.net/),網站的WIKI是空白的,因此只能在源碼包裏找使用說明了,很遺憾Windows下怎麼編譯沒說明,只是說明了Windows安裝包的使用(可能看得不夠仔細,沒找到),源碼包裏面有個VS的工程一樣是用庫文件的。網上搜了一下,也都是使用官網Windows安裝包,而後調用安裝目錄的庫文件的例程,直接使用源碼的找不到。卻是恰好找到了一個STM32F4的版本(http://www.openedv.com/forum.php?mod=viewthread&tid=82582&page=1),按照其說明貌似是有問題,不能使用的,但能編譯,至少還有些參考價值,好比須要使用到源碼包裏面的那些文件。源碼目錄以下,須要使用的文件,基本在zbar文件夾內。php

移植過程   

  開始時使用的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.chtml

工程結構以下:linux

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下的工程目錄,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定義的,包含該頭文件後再編譯,終於不報錯了。ui

 

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路徑
從新編譯。spa

經過。.net

 

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);unix

從新編譯運行後,窗口輸出以下:

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

 

最終的工程結構以下:

相關文章
相關標籤/搜索