news 2026/7/17 6:25:46

【2017-11-12】交叉编译libzbar和libjpeg的简单笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【2017-11-12】交叉编译libzbar和libjpeg的简单笔记

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2017-11-12| 标题:交叉编译libzbar和libjpeg的简单笔记分类:编程 / C && C++ |标签:C&&C++·zbar·libjpeg


交叉编译libzbar和libjpeg的简单笔记

    • zbar
      • 正常编译
      • 交叉编译
    • libjpeg
      • 正常编译
      • 交叉编译
    • DEMO

最近项目上需要使用二维码识别,网上简单的搜索了下相关知识,这里简单的笔记下流水账。

zbar

首先下载zbar源码,官方网址:

解压后发现是configure这种方式编译的。

正常编译

cstriker1407:/zbar/zbar-0.10$ ./configure--help`configure' configures zbar0.10to adapt to many kinds of systems. 。。。。。。 。。。。。。 Report bugs to<spadix@users.sourceforge.net>.

由于项目只用于识别二维码,因此简单起见,去掉所有的编译可选项。

cstriker1407:/zbar/zbar-0.10$ ./configure --disable-video --without-imagemagick --without-xv --without-xshm --without-gtk --without-python -without-qt --disable-assert 。。。。。。。。 。。。。。。。。 cstriker1407:/zbar/zbar-0.10$make。。。。。。。。 。。。。。。。。

编译完成后的库就在 zbar/.libs/ 中。

交叉编译

cstriker1407:/zbar/zbar-0.10$CC=XXXXXXXX/bin/arm-unknown-linux-uclibcgnueabi-gcc ./configure --disable-video --without-imagemagick --without-xv --without-xshm --without-gtk --without-python -without-qt --disable-assert--build=x86_64-host=arm-unknown-linux-uclibcgnueabi --disable-shared cstriker1407:/zbar/zbar-0.10$make

libjpeg

libjpeg的下载地址
【 https://sourceforge.net/projects/libjpeg/ 】

正常编译

cstriker1407:/libjpeg/jpeg-9b$ ./configure cstriker1407:/libjpeg/jpeg-9b$make

交叉编译

cstriker1407:/libjpeg/jpeg-9b$CC=usr/bin/arm-unknown-linux-uclibcgnueabi-gcc ./configure--build=x86_64-host=arm-unknown-linux-uclibcgnueabi cstriker1407:/libjpeg/jpeg-9b$make

DEMO

#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<zbar.h>#include<jpeglib.h>#include<jerror.h>staticvoid_convert_data(constunsignedchar*p_jpg_buffer,unsignedintjpg_size,int*width,int*height,void**raw){structjpeg_decompress_structcinfo;structjpeg_error_mgrerr;cinfo.err=jpeg_std_error(&err);jpeg_create_decompress(&cinfo);jpeg_mem_src(&cinfo,(unsignedchar*)p_jpg_buffer,jpg_size);(void)jpeg_read_header(&cinfo,TRUE);cinfo.out_color_space=JCS_GRAYSCALE;// cinfo.two_pass_quantize = TRUE;(void)jpeg_start_decompress(&cinfo);*width=cinfo.image_width;*height=cinfo.image_height;*raw=(void*)malloc(cinfo.output_width*cinfo.output_height*3);unsignedbpl=cinfo.output_width*cinfo.output_components;JSAMPROW buf=(void*)*raw;JSAMPARRAY line=&buf;for(;cinfo.output_scanline<cinfo.output_height;buf+=bpl){jpeg_read_scanlines(&cinfo,line,1);}(void)jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);}intmain(intargc,char**argv){if(argc<2)return(1);FILE*pFile=fopen(argv[1],"r+b");unsignedchar*p_ReadBuffer=malloc(81920);memset(p_ReadBuffer,0,81920);intfreadResult=fread(p_ReadBuffer,1,81920,pFile);printf("read%d ",freadResult);zbar_image_scanner_t*scanner=NULL;scanner=zbar_image_scanner_create();zbar_image_scanner_set_config(scanner,ZBAR_QRCODE,ZBAR_CFG_ENABLE,1);/* obtain image data */intwidth=0,height=0;void*raw=NULL;_convert_data(p_ReadBuffer,freadResult,&width,&height,&raw);free(p_ReadBuffer);printf("width:%d height:%d ",width,height);/* wrap image data */zbar_image_t*image=zbar_image_create();zbar_image_set_format(image,*(int*)"Y800");zbar_image_set_size(image,width,height);zbar_image_set_data(image,raw,width*height,zbar_image_free_data);/* scan the image for barcodes */intn=zbar_scan_image(scanner,image);/* extract results */constzbar_symbol_t*symbol=zbar_image_first_symbol(image);for(;symbol;symbol=zbar_symbol_next(symbol)){/* do something useful with results */zbar_symbol_type_ttyp=zbar_symbol_get_type(symbol);constchar*data=zbar_symbol_get_data(symbol);printf("decoded%s symbol \"%s\" ",zbar_get_symbol_name(typ),data);}/* clean up */zbar_image_destroy(image);zbar_image_scanner_destroy(scanner);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 6:25:24

【2018-01-19】【转】Linux的readv和writev

[历史归档] 本文原发布于 cstriker1407.info 个人博客&#xff0c;内容为历史存档&#xff0c;仅供参考。 发布时间&#xff1a; 2018-01-19 &#xff5c; 标题&#xff1a;【转】Linux的readv和writev &#xff5c; 分类&#xff1a; 操作系统 / linux linux readv/writev…

作者头像 李华
网站建设 2026/7/17 6:24:55

x86保护模式下的DispInt与DispAL函数解析

1. pmtest7.asm背景与功能定位在x86实模式向保护模式切换的经典实验中&#xff0c;pmtest7.asm是一个具有教学意义的汇编代码示例。这个文件通常出现在操作系统开发或计算机系统结构课程中&#xff0c;主要演示如何从16位实模式切换到32位保护模式&#xff0c;并展示基本的内存…

作者头像 李华
网站建设 2026/7/17 6:24:46

Windows 10系统操作与应用9小时视频教程

1. Windows 10系统操作与应用视频教程概述这个9小时的Windows 10系统操作与应用视频教程&#xff0c;是为想要系统学习Windows 10操作系统的用户设计的全面学习资源。无论你是刚接触Windows 10的新手&#xff0c;还是希望提升系统操作效率的中级用户&#xff0c;这套教程都能提…

作者头像 李华
网站建设 2026/7/17 6:24:01

OpenVLA复现指南:具身智能工程化落地的完整实践

1. 项目概述&#xff1a;为什么“复现并理解 OpenVLA”不是一句空话&#xff0c;而是当前机器人智能落地的关键切口“复现并理解 OpenVLA”这六个字&#xff0c;在2025年春季的AI工程圈里&#xff0c;已经不是学术论文里的一个章节标题&#xff0c;而是一条真实存在的技术分水岭…

作者头像 李华
网站建设 2026/7/17 6:23:26

开源AI CRM系统:架构解析与智能应用实践

1. 开源AI CRM系统的时代背景与核心价值在数字化转型浪潮席卷全球的当下&#xff0c;企业客户关系管理正经历着从传统工具到智能平台的质变。开源AI CRM系统的出现&#xff0c;标志着客户关系管理进入了"智能协同"的新阶段。这类系统将开源软件的灵活性与人工智能的预…

作者头像 李华
网站建设 2026/7/17 6:23:22

魔搭+OpenVINO加速Qwen3-TTS CPU语音合成实战

1. 项目概述&#xff1a;为什么在CPU上跑Qwen3-TTS&#xff0c;还要专门搭一套“魔搭OpenVINO”链路&#xff1f; 你有没有试过直接用 transformers 加载Qwen3-TTS跑语音合成&#xff1f;我试过——在一台i7-11800H的笔记本上&#xff0c;合成一句20秒的中文&#xff0c;端到…

作者头像 李华