源碼
下載最新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基本能正常運行了。
最終的工程結構以下: